unsigned int timeout_msecs, idle_timeout_msecs;
+ struct ioloop *ioloop;
+
struct istream *input;
struct io *io;
struct timeout *to_idle;
if (client->deinit_client_at_free)
dns_client_deinit(&client);
else if (client->head == NULL && client->fd != -1) {
- client->to_idle = timeout_add(client->idle_timeout_msecs,
- dns_client_idle_timeout, client);
+ client->to_idle = timeout_add_to(client->ioloop,
+ client->idle_timeout_msecs,
+ dns_client_idle_timeout, client);
}
i_free(lookup);
}
if (lookup->to != NULL)
lookup->to = io_loop_move_timeout(&lookup->to);
if (lookup->client->deinit_client_at_free)
- lookup->client->io = io_loop_move_io(&lookup->client->io);
+ dns_client_switch_ioloop(lookup->client);
}
struct dns_client *dns_client_init(const struct dns_lookup_settings *set)
client->path = i_strdup(set->dns_client_socket_path);
client->timeout_msecs = set->timeout_msecs;
client->idle_timeout_msecs = set->idle_timeout_msecs;
+ client->ioloop = (set->ioloop != NULL ? set->ioloop : current_ioloop);
client->fd = -1;
return client;
}
lookup->client = client;
lookup->ptr_lookup = ptr_lookup;
if (client->timeout_msecs != 0) {
- lookup->to = timeout_add(client->timeout_msecs,
- dns_lookup_timeout, lookup);
+ lookup->to = timeout_add_to(client->ioloop,
+ client->timeout_msecs,
+ dns_lookup_timeout, lookup);
}
lookup->result.ret = EAI_FAIL;
lookup->callback = callback;
void dns_client_switch_ioloop(struct dns_client *client)
{
struct dns_lookup *lookup;
+
+ if (client->ioloop == current_ioloop)
+ return;
+ client->ioloop = current_ioloop;
if (client->io != NULL)
client->io = io_loop_move_io(&client->io);