(*requestp)->sent_global_ioloop_usecs + 999) / 1000;
if (conn->client->ioloop != NULL) {
int http_ioloop_msecs =
- (io_loop_get_wait_usecs(conn->client->ioloop) + 999) / 1000;
+ (io_wait_timer_get_usecs(conn->io_wait_timer) -
+ (*requestp)->sent_http_ioloop_usecs + 999) / 1000;
other_ioloop_msecs -= http_ioloop_msecs;
str_printfa(str, ", %d.%03d in http ioloop",
http_ioloop_msecs/1000, http_ioloop_msecs%1000);
conn->peer = peer;
if (peer->addr.type != HTTP_CLIENT_PEER_ADDR_RAW)
i_array_init(&conn->request_wait_list, 16);
+ conn->io_wait_timer = io_wait_timer_add();
conn->label = i_strdup_printf("%s [%d]",
http_client_peer_label(peer), conn->id);
ssl_iostream_unref(&conn->ssl_iostream);
if (conn->connect_initialized)
connection_deinit(&conn->conn);
+ io_wait_timer_remove(&conn->io_wait_timer);
i_free(conn);
return FALSE;
conn->to_response = io_loop_move_timeout(&conn->to_response);
if (conn->incoming_payload != NULL)
i_stream_switch_ioloop(conn->incoming_payload);
+ conn->io_wait_timer = io_wait_timer_move(&conn->io_wait_timer);
connection_switch_ioloop(&conn->conn);
}
unsigned int attempts;
unsigned int redirects;
uint64_t sent_global_ioloop_usecs;
+ uint64_t sent_http_ioloop_usecs;
uint64_t sent_lock_usecs;
unsigned int delayed_error_status;
struct istream *incoming_payload;
struct io *io_req_payload;
struct ioloop *last_ioloop;
+ struct io_wait_timer *io_wait_timer;
/* requests that have been sent, waiting for response */
ARRAY_TYPE(http_client_request) request_wait_list;
req->sent_time = ioloop_timeval;
req->sent_lock_usecs = file_lock_wait_get_total_usecs();
req->sent_global_ioloop_usecs = ioloop_global_wait_usecs;
+ req->sent_http_ioloop_usecs =
+ io_wait_timer_get_usecs(req->conn->io_wait_timer);
o_stream_cork(output);
if (o_stream_sendv(output, iov, N_ELEMENTS(iov)) < 0) {
*error_r = t_strdup_printf("write(%s) failed: %s",