]> code.citadel.org Git - citadel.git/blobdiff - citadel/serv_extensions.c
CtdlUnregisterRoomHook(): second try.
[citadel.git] / citadel / serv_extensions.c
index 9100daea3509c914b2df4a8670de418b146b9bda..0553e34a9d68efd8bf1afa01587a5719329b000b 100644 (file)
@@ -409,7 +409,7 @@ void cmd_log_get(char *argbuf)
 
        while (GetNextHashPos(LogDebugEntryTable, Pos, &HKLen, &ch, &vptr)) {
                LogDebugEntry *E = (LogDebugEntry*)vptr;
-               cprintf("%s%d\n", ch, *E->LogP);
+               cprintf("%s|%d\n", ch, *E->LogP);
        }
        
        DeleteHashPos(&Pos);
@@ -757,18 +757,28 @@ void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *))
 
 void CtdlUnregisterRoomHook(int (*fcn_ptr)(struct ctdlroom *))
 {
-       RoomFunctionHook *cur, *p;
-
-       for (cur = RoomHookTable; cur != NULL; cur = cur->next) {
-               while (cur != NULL && fcn_ptr == cur->fcn_ptr) {
+       RoomFunctionHook *cur, *p, *last;
+       last = NULL;
+       cur = RoomHookTable;
+       while (cur != NULL)
+       {
+               if (fcn_ptr == cur->fcn_ptr) {
                        MODM_syslog(LOG_DEBUG, "Unregistered room function\n");
                        p = cur->next;
-                       if (cur == RoomHookTable) {
-                               RoomHookTable = p;
-                       }
+
                        free(cur);
+                       cur = NULL;
+
+                       if (last != NULL)
+                               last->next = p;
+                       else 
+                               RoomHookTable = p;
                        cur = p;
                }
+               last = cur;
+               if (cur != NULL)
+                       cur = cur->next;
+
        }
 }