Fix locking of netcnofigs
[citadel.git] / citadel / modules / network / serv_netspool.c
index 9394091754712c504b4471981402c8abcf2dc1d7..714bb0471918db577cc597c25e9b5d7e05313f45 100644 (file)
@@ -72,7 +72,6 @@
 #include "internet_addressing.h"
 #include "serv_network.h"
 #include "clientsocket.h"
-#include "file_ops.h"
 #include "citadel_dirs.h"
 #include "threads.h"
 #include "context.h"
@@ -169,7 +168,7 @@ void Netmap_AddMe(struct CtdlMessage *msg, const char *defl, long defllen)
        if (CM_IsEmpty(msg, eMessagePath)) {
                CM_SetField(msg, eMessagePath, defl, defllen);
        }
-       node_len = strlen(config.c_nodename);
+       node_len = configlen.c_nodename;
        if (node_len >= SIZ) 
                node_len = SIZ - 1;
        memcpy(buf, config.c_nodename, node_len);
@@ -210,11 +209,13 @@ void InspectQueuedRoom(SpoolControl **pSC,
                return;
        }
 
+       begin_critical_section(S_NETCONFIGS);
        if (sc->RNCfg == NULL)
                sc->RNCfg = CtdlGetNetCfgForRoom(sc->room.QRnumber);
 
        if (!HaveSpoolConfig(sc->RNCfg))
        {
+               end_critical_section(S_NETCONFIGS);
                free(sc);
                /* nothing to do for this room... */
                return;
@@ -232,6 +233,7 @@ void InspectQueuedRoom(SpoolControl **pSC,
        
        if (StrLength(sc->RNCfg->Sender) > 0)
                sc->Users[roommailalias] = NewStrBufDup(sc->RNCfg->Sender);
+       end_critical_section(S_NETCONFIGS);
 
        sc->next = *pSC;
        *pSC = sc;
@@ -401,12 +403,13 @@ void network_spoolout_room(SpoolControl *sc)
        /* Now rewrite the config file */
        if (sc->lastsent != lastsent)
        {
+               begin_critical_section(S_NETCONFIGS);
                sc->RNCfg = CtdlGetNetCfgForRoom(sc->room.QRnumber);
 
                sc->RNCfg->lastsent = sc->lastsent;
                sc->RNCfg->changed = 1;
+               end_critical_section(S_NETCONFIGS);
        }
-       end_critical_section(S_NETCONFIGS);
 }
 
 /*
@@ -421,7 +424,7 @@ void network_process_buffer(char *buffer, long size, HashList *working_ignetcfg,
        struct CtdlMessage *msg = NULL;
        long pos;
        int field;
-       struct recptypes *recp = NULL;
+       recptypes *recp = NULL;
        char target_room[ROOMNAMELEN];
        struct ser_ret sermsg;
        char filename[PATH_MAX];
@@ -463,7 +466,7 @@ void network_process_buffer(char *buffer, long size, HashList *working_ignetcfg,
                if (strcasecmp(msg->cm_fields[eDestination], config.c_nodename)) {
 
                        /* route the message */
-                       Buf = NewStrBufPlain(msg->cm_fields[eDestination], -1);
+                       Buf = NewStrBufPlain(CM_KEY(msg,eDestination));
                        if (CtdlIsValidNode(&nexthop, 
                                            NULL, 
                                            Buf, 
@@ -624,7 +627,7 @@ void network_process_file(char *filename,
        long msgend = (-1L);
        long msgcur = 0L;
        int ch;
-
+       int nMessages = 0;
 
        fp = fopen(filename, "rb");
        if (fp == NULL) {
@@ -653,6 +656,7 @@ void network_process_file(char *filename,
                }
 
                ++msgcur;
+               nMessages ++;
        }
 
        msgend = msgcur - 1;
@@ -663,8 +667,15 @@ void network_process_file(char *filename,
                                        working_ignetcfg,
                                        the_netmap,
                                        netmap_changed);
+               nMessages ++;
        }
 
+       if (nMessages > 0)
+               QN_syslog(LOG_INFO,
+                         "network: processed %d messages in %s\n",
+                         nMessages,
+                         filename);
+
        fclose(fp);
        unlink(filename);
 }
@@ -713,7 +724,7 @@ void network_do_spoolin(HashList *working_ignetcfg, HashList *the_netmap, int *n
               (filedir_entry != NULL))
        {
 #ifdef _DIRENT_HAVE_D_NAMLEN
-               d_namelen = filedir_entry->d_namelen;
+               d_namelen = filedir_entry->d_namlen;
 
 #else
                d_namelen = strlen(filedir_entry->d_name);
@@ -817,7 +828,7 @@ void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netm
               (filedir_entry != NULL))
        {
 #ifdef _DIRENT_HAVE_D_NAMLEN
-               d_namelen = filedir_entry->d_namelen;
+               d_namelen = filedir_entry->d_namlen;
 
 #else
                d_namelen = strlen(filedir_entry->d_name);
@@ -971,7 +982,7 @@ void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netm
               (filedir_entry != NULL))
        {
 #ifdef _DIRENT_HAVE_D_NAMLEN
-               d_namelen = filedir_entry->d_namelen;
+               d_namelen = filedir_entry->d_namlen;
 
 #else
                d_namelen = strlen(filedir_entry->d_name);