Skip to content

Commit

Permalink
lib-program-client: Add switch_ioloop vfunc
Browse files Browse the repository at this point in the history
This lets program-client backends do their own
special io loop switching.
  • Loading branch information
cmouse committed Oct 19, 2016
1 parent 17541ea commit 204afc1
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 1 deletion.
12 changes: 12 additions & 0 deletions src/lib-program-client/program-client-local.c
Expand Up @@ -465,6 +465,17 @@ void program_client_local_destroy(struct program_client *pclient ATTR_UNUSED)
child_wait_deinit();
}

static
void program_client_local_switch_ioloop(struct program_client *pclient)
{
struct program_client_local *slclient =
(struct program_client_local *)pclient;

if (slclient->to_kill)
slclient->to_kill = io_loop_move_timeout(&slclient->to_kill);
lib_signals_reset_ioloop();
}

struct program_client *
program_client_local_create(const char *bin_path,
const char *const *args,
Expand All @@ -478,6 +489,7 @@ program_client_local_create(const char *bin_path,
program_client_init(&pclient->client, pool, bin_path, args, set);
pclient->client.connect = program_client_local_connect;
pclient->client.close_output = program_client_local_close_output;
pclient->client.switch_ioloop = program_client_local_switch_ioloop;
pclient->client.disconnect = program_client_local_disconnect;
pclient->client.destroy = program_client_local_destroy;
pclient->pid = -1;
Expand Down
1 change: 1 addition & 0 deletions src/lib-program-client/program-client-private.h
Expand Up @@ -53,6 +53,7 @@ struct program_client {

int (*connect) (struct program_client * pclient);
int (*close_output) (struct program_client * pclient);
void (*switch_ioloop) (struct program_client * pclient);
void (*disconnect) (struct program_client * pclient, bool force);
void (*destroy) (struct program_client * pclient);

Expand Down
6 changes: 6 additions & 0 deletions src/lib-program-client/program-client-remote.c
Expand Up @@ -316,6 +316,11 @@ void program_client_remote_disconnect(struct program_client *pclient, bool force
program_client_disconnected(pclient);
}

static
void program_client_remote_switch_ioloop(struct program_client *pclient ATTR_UNUSED)
{
}

struct program_client *
program_client_unix_create(const char *socket_path, const char *const *args,
const struct program_client_settings *set,
Expand All @@ -330,6 +335,7 @@ program_client_unix_create(const char *socket_path, const char *const *args,
pclient->client.connect = program_client_unix_connect;
pclient->client.close_output = program_client_remote_close_output;
pclient->client.disconnect = program_client_remote_disconnect;
pclient->client.switch_ioloop = program_client_remote_switch_ioloop;
pclient->noreply = noreply;

return &pclient->client;
Expand Down
2 changes: 1 addition & 1 deletion src/lib-program-client/program-client.c
Expand Up @@ -563,7 +563,7 @@ void program_client_switch_ioloop(struct program_client *pclient)
pclient->to = io_loop_move_timeout(&pclient->to);
if (pclient->io != NULL)
pclient->io = io_loop_move_io(&pclient->io);
lib_signals_reset_ioloop();
pclient->switch_ioloop(pclient);
}

static
Expand Down

0 comments on commit 204afc1

Please sign in to comment.