From: Timo Sirainen Date: Wed, 30 Sep 2009 17:09:18 +0000 (-0400) Subject: master: Fix to previous change, don't crash at service deinit. X-Git-Tag: 2.0.alpha1~97 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c8a485727ff05ce80984e1da61bf7930c743b99;p=thirdparty%2Fdovecot%2Fcore.git master: Fix to previous change, don't crash at service deinit. --HG-- branch : HEAD --- diff --git a/src/master/service-anvil.c b/src/master/service-anvil.c index 76b32a908f..546a835907 100644 --- a/src/master/service-anvil.c +++ b/src/master/service-anvil.c @@ -13,6 +13,15 @@ #define ANVIL_HANDSHAKE "VERSION\tanvil\t1\t0\n" +static void +service_list_anvil_discard_input_stop(struct service_list *service_list) +{ + if (service_list->anvil_io_blocking != NULL) { + io_remove(&service_list->anvil_io_blocking); + io_remove(&service_list->anvil_io_nonblocking); + } +} + static void anvil_input_fd_discard(struct service_list *service_list, int fd) { @@ -22,8 +31,7 @@ anvil_input_fd_discard(struct service_list *service_list, int fd) ret = read(fd, buf, sizeof(buf)); if (ret <= 0) { i_error("read(anvil fd) failed: %m"); - io_remove(&service_list->anvil_io_blocking); - io_remove(&service_list->anvil_io_nonblocking); + service_list_anvil_discard_input_stop(service_list); } } @@ -118,6 +126,7 @@ int service_list_init_anvil(struct service_list *service_list, void service_list_deinit_anvil(struct service_list *service_list) { + service_list_anvil_discard_input_stop(service_list); service_process_notify_deinit(&service_list->anvil_kills); if (close(service_list->blocking_anvil_fd[0]) < 0) i_error("close(anvil) failed: %m"); @@ -131,10 +140,7 @@ void service_list_deinit_anvil(struct service_list *service_list) void service_anvil_process_created(struct service *service) { - if (service->list->anvil_io_blocking != NULL) { - io_remove(&service->list->anvil_io_blocking); - io_remove(&service->list->anvil_io_nonblocking); - } + service_list_anvil_discard_input_stop(service->list); } void service_anvil_process_destroyed(struct service *service)