dovecot-2.0: lib-master: If config fd is kept open, close it aft...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Oct 10 04:25:37 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/40a71105529b
changeset: 10033:40a71105529b
user: Timo Sirainen <tss at iki.fi>
date: Fri Oct 09 21:25:27 2009 -0400
description:
lib-master: If config fd is kept open, close it after last connection has been created.
diffstat:
1 file changed, 17 insertions(+), 1 deletion(-)
src/lib-master/master-service.c | 18 +++++++++++++++++-
diffs (42 lines):
diff -r ebe9b1e7a46b -r 40a71105529b src/lib-master/master-service.c
--- a/src/lib-master/master-service.c Fri Oct 09 21:02:56 2009 -0400
+++ b/src/lib-master/master-service.c Fri Oct 09 21:25:27 2009 -0400
@@ -475,6 +475,15 @@ void master_service_client_connection_de
}
}
+static void master_service_close_config_fd(struct master_service *service)
+{
+ if (service->config_fd != -1) {
+ if (close(service->config_fd) < 0)
+ i_error("close(master config fd) failed: %m");
+ service->config_fd = -1;
+ }
+}
+
void master_service_deinit(struct master_service **_service)
{
struct master_service *service = *_service;
@@ -483,6 +492,7 @@ void master_service_deinit(struct master
io_listeners_remove(service);
+ master_service_close_config_fd(service);
if (service->io_status_error != NULL)
io_remove(&service->io_status_error);
if (service->io_status_write != NULL)
@@ -549,7 +559,13 @@ static void master_service_listen(struct
service->master_status.available_count--;
master_status_update(service);
- service->callback(&conn);
+ service->callback(&conn);
+
+ if (service->master_status.available_count == 0 &&
+ service->service_count_left == 1) {
+ /* we're dying as soon as this connection closes. */
+ master_service_close_config_fd(service);
+ }
}
static void io_listeners_init(struct master_service *service)
More information about the dovecot-cvs
mailing list