Skip to content

Commit

Permalink
lib-master: Allow calling master_service_deinit() without _init_finish()
Browse files Browse the repository at this point in the history
  • Loading branch information
sirainen committed Aug 22, 2018
1 parent af21240 commit 4f290b8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/lib-master/master-service-private.h
Expand Up @@ -86,6 +86,7 @@ struct master_service {
bool config_path_from_master:1;
bool log_initialized:1;
bool ssl_module_loaded:1;
bool init_finished:1;
};

void master_service_io_listeners_add(struct master_service *service);
Expand Down
8 changes: 8 additions & 0 deletions src/lib-master/master-service.c
Expand Up @@ -582,6 +582,9 @@ void master_service_init_finish(struct master_service *service)
enum libsig_flags sigint_flags = LIBSIG_FLAG_DELAYED;
struct stat st;

i_assert(!service->init_finished);
service->init_finished = TRUE;

/* set default signal handlers */
if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0)
sigint_flags |= LIBSIG_FLAG_RESTART;
Expand Down Expand Up @@ -995,6 +998,11 @@ void master_service_deinit(struct master_service **_service)

*_service = NULL;

if (!service->init_finished &&
(service->flags & MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME) == 0) {
if (!t_pop(&service->datastack_frame_id))
i_panic("Leaked t_pop() call");
}
master_service_haproxy_abort(service);

master_service_io_listeners_remove(service);
Expand Down

0 comments on commit 4f290b8

Please sign in to comment.