]> code.citadel.org Git - citadel.git/blobdiff - citadel/user_ops.c
* Finished the concurrency check for network polling. (Now works both for
[citadel.git] / citadel / user_ops.c
index 2cbcb0c8648a240ca21f6fcc256e7eb6dea57abb..cedb01e4af5d403db8a9b2441aadf388f313e148 100644 (file)
@@ -5,6 +5,10 @@
  *
  */
 
+#ifdef DLL_EXPORT
+#define IN_LIBCIT
+#endif
+
 #include "sysdep.h"
 #include <errno.h>
 #include <stdlib.h>
@@ -37,6 +41,7 @@
 #include "server.h"
 #include "database.h"
 #include "user_ops.h"
+#include "dynloader.h"
 #include "sysdep_decls.h"
 #include "support.h"
 #include "room_ops.h"
@@ -45,7 +50,6 @@
 #include "control.h"
 #include "msgbase.h"
 #include "config.h"
-#include "dynloader.h"
 #include "tools.h"
 #include "citserver.h"
 
@@ -421,13 +425,29 @@ void logged_in_response(void)
 void logout(struct CitContext *who)
 {
        who->logged_in = 0;
+
+       /*
+        * If there is a download in progress, abort it.
+        */
        if (who->download_fp != NULL) {
                fclose(who->download_fp);
                who->download_fp = NULL;
        }
+
+       /*
+        * If there is an upload in progress, abort it.
+        */
        if (who->upload_fp != NULL) {
                abort_upl(who);
        }
+
+       /*
+        * If we were talking to a network node, we're not anymore...
+        */
+       if (strlen(who->net_node) > 0) {
+               network_talking_to(who->net_node, NTT_REMOVE);
+       }
+
        /* Do modular stuff... */
        PerformSessionHooks(EVT_LOGOUT);
 }
@@ -1081,7 +1101,6 @@ void ForEachUser(void (*CallBack) (struct usersupp * EachUser, void *out_data),
        struct usersupp usbuf;
        struct cdbdata *cdbus;
 
-       cdb_begin_transaction();
        cdb_rewind(CDB_USERSUPP);
 
        while (cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) {
@@ -1092,7 +1111,6 @@ void ForEachUser(void (*CallBack) (struct usersupp * EachUser, void *out_data),
                cdb_free(cdbus);
                (*CallBack) (&usbuf, in_data);
        }
-       cdb_end_transaction();
 }