X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_queue.c;h=024336df871e7de743e3bebd19bbcbba902b45f9;hb=4ebdea1025ba5fdbcc8bdd6ba142557d216796d1;hp=3bd8c95d7bdf2d871c22b988a1242e88f833a20e;hpb=131b59b3ca3c8368c6ad179ef7fb9cc02e99ede4;p=citadel.git diff --git a/citadel/modules/xmpp/xmpp_queue.c b/citadel/modules/xmpp/xmpp_queue.c index 3bd8c95d7..024336df8 100644 --- a/citadel/modules/xmpp/xmpp_queue.c +++ b/citadel/modules/xmpp/xmpp_queue.c @@ -1,23 +1,21 @@ /* - * $Id$ - * * XMPP event queue * * Copyright (c) 2007-2009 by Art Cancro * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3. + * + * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * * */ @@ -59,6 +57,7 @@ #include "serv_xmpp.h" int queue_event_seq = 0; +struct xmpp_event *xmpp_queue = NULL; void xmpp_queue_event(int event_type, char *email_addr) { @@ -68,7 +67,7 @@ void xmpp_queue_event(int event_type, char *email_addr) { int purged_something = 0; struct CitContext *cptr; - CtdlLogPrintf(CTDL_DEBUG, "xmpp_queue_event(%d, %s)\n", event_type, email_addr); + XMPP_syslog(LOG_DEBUG, "xmpp_queue_event(%d, %s)\n", event_type, email_addr); /* Purge events more than a minute old */ begin_critical_section(S_XMPP_QUEUE); @@ -113,7 +112,7 @@ void xmpp_queue_event(int event_type, char *email_addr) { begin_critical_section(S_SESSION_TABLE); for (cptr = ContextList; cptr != NULL; cptr = cptr->next) { if ((cptr->logged_in) && (cptr->h_async_function == xmpp_async_loop)) { - cptr->async_waiting = 1; + set_async_waiting(cptr); } } end_critical_section(S_SESSION_TABLE); @@ -148,3 +147,30 @@ void xmpp_process_events(void) { XMPP->last_event_processed = highest_event; } + + +void xmpp_cleanup_events(void) +{ + struct xmpp_event *ptr, *ptr2; + begin_critical_section(S_XMPP_QUEUE); + ptr = xmpp_queue; + xmpp_queue = NULL; + while (ptr != NULL) { + ptr2 = ptr->next; + free(ptr); + ptr = ptr2; + } + end_critical_section(S_XMPP_QUEUE); + +} + +CTDL_MODULE_INIT(xmpp_queue) +{ + if (!threading) { + + CtdlRegisterCleanupHook(xmpp_cleanup_events); + } + + /* return our module name for the log */ + return "xmpp_queue"; +}