From 0140600fa069e91cda225c5aa289eca72b54e6c6 Mon Sep 17 00:00:00 2001 From: Dave West Date: Fri, 7 Dec 2007 00:15:12 +0000 Subject: [PATCH] EXTREMELY EXPERIMENTAL rss client and network modules are now run as scheduled threads. --- citadel/modules/network/serv_network.c | 11 +++++++---- citadel/modules/rssclient/serv_rssclient.c | 18 +++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index 7b112abf2..5d55b2336 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -2043,7 +2043,7 @@ void create_spool_dirs(void) { * * Run through the rooms doing various types of network stuff. */ -void network_do_queue(void) { +void *network_do_queue(void *args) { static time_t last_run = 0L; struct RoomProcList *ptr; int full_processing = 1; @@ -2062,7 +2062,7 @@ void network_do_queue(void) { * don't really require extremely fine granularity here, we'll do it * with a static variable instead. */ - if (doing_queue) return; + if (doing_queue) return NULL; doing_queue = 1; /* Load the IGnet Configuration into memory */ @@ -2134,6 +2134,8 @@ void network_do_queue(void) { } doing_queue = 0; + CtdlThreadSchedule("IGnet Network", CTDLTHREAD_BIGSTACK, network_do_queue, NULL, time(NULL) + 60); + return NULL; } @@ -2209,11 +2211,12 @@ CTDL_MODULE_INIT(network) CtdlRegisterProtoHook(cmd_snet, "SNET", "Set network config"); CtdlRegisterProtoHook(cmd_netp, "NETP", "Identify as network poller"); CtdlRegisterProtoHook(cmd_nsyn, "NSYN", "Synchronize room to node"); - CtdlRegisterSessionHook(network_do_queue, EVT_TIMER); +// CtdlRegisterSessionHook(network_do_queue, EVT_TIMER); CtdlRegisterRoomHook(network_room_handler); CtdlRegisterCleanupHook(destroy_network_queue_room); } - + else + CtdlThreadSchedule("IGnet Network", CTDLTHREAD_BIGSTACK, network_do_queue, NULL, 0); /* return our Subversion id for the Log */ return "$Id$"; } diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index c9461a673..4ef2cfb32 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -580,17 +580,18 @@ void rssclient_scan_room(struct ctdlroom *qrbuf, void *data) /* * Scan for rooms that have RSS client requests configured */ -void rssclient_scan(void) { +void *rssclient_scan(void *args) { static time_t last_run = 0L; static int doing_rssclient = 0; struct rssnetcfg *rptr = NULL; + CtdlThreadAllocTSD(); /* * Run RSS client no more frequently than once every n seconds */ - if ( (time(NULL) - last_run) < config.c_net_freq ) { - return; - } +// if ( (time(NULL) - last_run) < config.c_net_freq ) { +// return; +// } /* * This is a simple concurrency check to make sure only one rssclient run @@ -598,7 +599,7 @@ void rssclient_scan(void) { * don't really require extremely fine granularity here, we'll do it * with a static variable instead. */ - if (doing_rssclient) return; + if (doing_rssclient) return NULL; doing_rssclient = 1; lprintf(CTDL_DEBUG, "rssclient started\n"); @@ -615,6 +616,8 @@ void rssclient_scan(void) { lprintf(CTDL_DEBUG, "rssclient ended\n"); last_run = time(NULL); doing_rssclient = 0; + CtdlThreadSchedule ("RSS Client", CTDLTHREAD_BIGSTACK, rssclient_scan, NULL, last_run + config.c_net_freq); + return NULL; } @@ -622,10 +625,11 @@ void rssclient_scan(void) { CTDL_MODULE_INIT(rssclient) { - if (!threading) + if (threading) { #ifdef HAVE_EXPAT - CtdlRegisterSessionHook(rssclient_scan, EVT_TIMER); +// CtdlRegisterSessionHook(rssclient_scan, EVT_TIMER); + CtdlThreadSchedule ("RSS Client", CTDLTHREAD_BIGSTACK, rssclient_scan, NULL, 0); #else lprintf(CTDL_INFO, "This server is missing the Expat XML parser. RSS client will be disabled.\n"); #endif -- 2.39.2