From 8ba2d883666677cf48f5525cfb99a1aa1b832537 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Mon, 4 May 2015 00:22:09 +0200 Subject: [PATCH] lib-sieve: util: program client: Fixed handling of connecting asynchronously. --- src/lib-sieve/util/program-client-remote.c | 2 +- src/lib-sieve/util/program-client.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lib-sieve/util/program-client-remote.c b/src/lib-sieve/util/program-client-remote.c index f548baf0a..3636f41a2 100644 --- a/src/lib-sieve/util/program-client-remote.c +++ b/src/lib-sieve/util/program-client-remote.c @@ -239,7 +239,7 @@ static int program_client_remote_connect(struct program_client *pclient) !pclient->output_seekable ? -1 : fd ); pclient->fd_out = fd; pclient->io = io_add(fd, IO_WRITE, program_client_remote_connected, pclient); - return 1; + return 0; } static int program_client_remote_close_output(struct program_client *pclient) diff --git a/src/lib-sieve/util/program-client.c b/src/lib-sieve/util/program-client.c index 87d083c5b..7fe0f93e5 100644 --- a/src/lib-sieve/util/program-client.c +++ b/src/lib-sieve/util/program-client.c @@ -490,13 +490,11 @@ int program_client_run(struct program_client *pclient) pclient->exit_code = 0; pclient->error = PROGRAM_CLIENT_ERROR_NONE; - pclient->ioloop = io_loop_create(); if ( program_client_connect(pclient) >= 0 ) { /* run output */ - ret = 1; - if ( pclient->program_output != NULL && + if ( ret > 0 && pclient->program_output != NULL && (ret=o_stream_flush(pclient->program_output)) == 0 ) { o_stream_set_flush_callback (pclient->program_output, program_client_program_output, pclient); @@ -505,7 +503,8 @@ int program_client_run(struct program_client *pclient) /* run i/o event loop */ if ( ret < 0 ) { pclient->error = PROGRAM_CLIENT_ERROR_IO; - } else if ( ret == 0 || program_client_input_pending(pclient) ) { + } else if ( !pclient->disconnected && + (ret == 0 || program_client_input_pending(pclient)) ) { io_loop_run(pclient->ioloop); } -- GitLab