Memleak: free the roomlist of the sieve-queued rooms on exit; other tiny leaks.
authorWilfried Goesgens <dothebart@citadel.org>
Sun, 14 Nov 2010 22:10:57 +0000 (23:10 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Tue, 16 Nov 2010 21:46:36 +0000 (22:46 +0100)
citadel/modules/sieve/serv_sieve.c

index f8c6e8c3589ac9336788f8d4cb00fa8a33a6c30a..8ad9ebab71323f4b9ce56021fc43f9845bdfd0aa 100644 (file)
@@ -1286,6 +1286,25 @@ BAIL:    res = sieve2_free(&sieve2_context);
 
 }
 
+void cleanup_sieve(void)
+{
+        struct RoomProcList *ptr, *ptr2;
+
+       if (msiv_extensions != NULL)
+               free(msiv_extensions);
+       msiv_extensions = NULL;
+
+        begin_critical_section(S_SIEVELIST);
+       ptr=sieve_list;
+       while (ptr != NULL) {
+               ptr2 = ptr->next;
+               free(ptr);
+               ptr = ptr2;
+       }
+        sieve_list = NULL;
+        end_critical_section(S_SIEVELIST);
+}
+
 int serv_sieve_room(struct ctdlroom *room)
 {
        if (!strcasecmp(&room->QRname[11], MAILROOM)) {
@@ -1303,6 +1322,7 @@ CTDL_MODULE_INIT(sieve)
                CtdlRegisterProtoHook(cmd_msiv, "MSIV", "Manage Sieve scripts");
                CtdlRegisterRoomHook(serv_sieve_room);
                CtdlRegisterSessionHook(perform_sieve_processing, EVT_HOUSE);
+               CtdlRegisterCleanupHook(cleanup_sieve);
        }
        
         /* return our Subversion id for the Log */