NETCFG: cleanup & memleaks fixed.
authorWilfried Goesgens <dothebart@citadel.org>
Sun, 17 Feb 2013 19:40:38 +0000 (20:40 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Sun, 17 Feb 2013 19:40:38 +0000 (20:40 +0100)
citadel/modules/network/netspool.h
citadel/modules/network/serv_netspool.c
citadel/modules/network/serv_network.c
citadel/netconfig.c

index e3f225b3e94e378c2337f4c861b50ed782f3da67..d04a49f1fdc6201657df4391a3dfc6479d55979c 100644 (file)
@@ -59,6 +59,7 @@ int HaveSpoolConfig(OneRoomNetCfg* RNCfg);
 void network_do_spoolin(HashList *working_ignetcfg, HashList *the_netmap, int *netmap_changed);
 void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netmap);
 void free_spoolcontrol_struct(SpoolControl **scc);
+void free_spoolcontrol_struct_members(SpoolControl *scc);
 int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
 int read_spoolcontrol_file(SpoolControl **scc, char *filename);
 
index ed79adb8b5316ea1c6a547abc37ccbfe6a8e0a86..b0928454c130aafb508bfe08c0141529654316a4 100644 (file)
@@ -237,8 +237,8 @@ void CalcListID(SpoolControl *sc)
        if (fd != 0) {
                struct stat stbuf;
 
-               fstat(fd, &stbuf);
-               if (stbuf.st_size > 0)
+               if ((fstat(fd, &stbuf) == 0) &&
+                   (stbuf.st_size > 0))
                {
                        sc->RoomInfo = NewStrBufPlain(NULL, stbuf.st_size + 1);
                        StrBufReadBLOB(sc->RoomInfo, &fd, 0, stbuf.st_size, &err);
@@ -1017,6 +1017,21 @@ void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netm
        closedir(dp);
 }
 
+void free_spoolcontrol_struct(SpoolControl **sc)
+{
+       free_spoolcontrol_struct_members(*sc);
+       free(*sc);
+       *sc = NULL;
+}
+
+void free_spoolcontrol_struct_members(SpoolControl *sc)
+{
+       int i;
+       FreeStrBuf(&sc->RoomInfo);
+       FreeStrBuf(&sc->ListID);
+       for (i = 0; i < maxRoomNetCfg; i++)
+               FreeStrBuf(&sc->Users[i]);
+}
 
 
 
index 5ba84707b7b0914cea2323ad06bee3c3d288381e..56492925e221a7ce68e1b769378db4e9e3d75f52 100644 (file)
@@ -176,7 +176,7 @@ int network_sync_to(char *target_node, long len)
        pCfgLine = pRNCFG->NetConfigs[ignet_push_share];
        while (pCfgLine != NULL)
        {
-               if (strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
+               if (!strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
                        break;
                pCfgLine = pCfgLine->next;
        }
@@ -189,13 +189,13 @@ int network_sync_to(char *target_node, long len)
        sc.RNCfg = &OneRNCFG;
        sc.RNCfg->NetConfigs[ignet_push_share] = DuplicateOneGenericCfgLine(pCfgLine);
 
+       CalcListID(&sc);
+
        end_critical_section(S_NETCONFIGS);
 
        sc.working_ignetcfg = CtdlLoadIgNetCfg();
        sc.the_netmap = CtdlReadNetworkMap();
 
-       CalcListID(&sc);
-
        /* Send ALL messages */
        num_spooled = CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, NULL,
                network_spool_msg, &sc);
@@ -205,6 +205,7 @@ int network_sync_to(char *target_node, long len)
 
        DeleteHash(&sc.working_ignetcfg);
        DeleteHash(&sc.the_netmap);
+       free_spoolcontrol_struct_members(&sc);
 
        QN_syslog(LOG_NOTICE, "Synchronized %d messages to <%s>\n",
                  num_spooled, target_node);
@@ -441,19 +442,6 @@ void network_bounce(struct CtdlMessage *msg, char *reason)
 }
 
 
-void free_network_spoolout_room(SpoolControl *sc)
-{
-       if (sc != NULL)
-       {
-               int i;
-               for (i = subpending; i < maxRoomNetCfg; i++)
-                       FreeStrBuf(&sc->Users[i]);
-               free(sc);
-       }
-}
-
-
-
 
 /*
  * network_do_queue()
@@ -553,7 +541,7 @@ void network_do_queue(void)
        while (pSC != NULL)
        {
                sc = pSC->next;
-               free_network_spoolout_room(pSC);
+               free_spoolcontrol_struct(&pSC);
                pSC = sc;
        }
        /* If there is anything in the inbound queue, process it */
index 7fc53c594c8df304a055847f938e6de65c723f8b..d4652e244b6a7be6848114846a3e58a572166a53 100644 (file)
@@ -146,16 +146,19 @@ void DeleteGenericCfgLine(const CfgLineType *ThisOne, RoomNetCfgLine **data)
 }
 RoomNetCfgLine *DuplicateOneGenericCfgLine(const RoomNetCfgLine *data)
 {
+       int i;
        RoomNetCfgLine *NewData;
 
        NewData = (RoomNetCfgLine*)malloc(sizeof(RoomNetCfgLine));
-       int i;
+       memset(NewData, 0, sizeof(RoomNetCfgLine));
        NewData->Value = (StrBuf **)malloc(sizeof(StrBuf*) * data->nValues);
+       memset(NewData->Value, 0, sizeof(StrBuf*) * data->nValues);
 
        for (i = 0; i < data->nValues; i++)
        {
                NewData->Value[i] = NewStrBufDup(data->Value[i]);
        }
+       NewData->nValues = data->nValues;
        return NewData;
 }
 int ReadRoomNetConfigFile(OneRoomNetCfg **pOneRNCfg, char *filename)