]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Keep service's processes in an easily accessible linked list.
authorTimo Sirainen <tss@iki.fi>
Mon, 19 Oct 2009 22:31:46 +0000 (18:31 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 19 Oct 2009 22:31:46 +0000 (18:31 -0400)
--HG--
branch : HEAD

src/master/service-process.c
src/master/service-process.h
src/master/service.h

index c0f21eaf2d3a7cff1a4833c664f32d2cf7624bb4..de35c59578c3cd72404dcb96ab192045628e7aa4 100644 (file)
@@ -10,6 +10,7 @@
 #include "base64.h"
 #include "hash.h"
 #include "str.h"
+#include "llist.h"
 #include "hostpid.h"
 #include "env-util.h"
 #include "fd-close-on-exec.h"
@@ -566,7 +567,8 @@ service_process_create(struct service *service, const char *const *auth_args,
                i_assert(fd[0] == -1);
                break;
        }
-               
+
+       DLLIST_PREPEND(&service->processes, process);
        process->refcount = 1;
        process->pid = pid;
        process->uid = uid;
@@ -588,6 +590,7 @@ void service_process_destroy(struct service_process *process)
        struct service *service = process->service;
        struct service_list *service_list = service->list;
 
+       DLLIST_REMOVE(&service->processes, process);
        hash_table_remove(service_pids, &process->pid);
 
        if (process->available_count > 0)
index 102c0b34fbc00931fd3633c2d9fa33f413bb45ad..1d780c5b153f8490061b9ea8d7a912f4557208ff 100644 (file)
@@ -2,6 +2,7 @@
 #define SERVICE_PROCESS_H
 
 struct service_process {
+       struct service_process *prev, *next;
        struct service *service;
        int refcount;
 
index 5b0238dde6bb127e4ba315c8dcd20fd5fa9cfdab..1a17ec106b215457b1565ee192bdda6755ee759f 100644 (file)
@@ -62,6 +62,8 @@ struct service {
 
        /* all listeners, even those that aren't currently listening */
        ARRAY_DEFINE(listeners, struct service_listener *);
+       /* linked list of all processes belonging to this service */
+       struct service_process *processes;
 
        /* number of processes currently created for this service */
        unsigned int process_count;