From 68024dbc1b04d5fc7422f5c67640475065e72399 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 3 Jun 2010 22:46:40 +0000 Subject: [PATCH] * add function to cleanly shutdown server threads --- citadel/context.c | 12 ++++++++++++ citadel/include/ctdl_module.h | 2 +- citadel/modules/smtp/serv_smtp.c | 4 +++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/citadel/context.c b/citadel/context.c index 32287e16d..5f964be4a 100644 --- a/citadel/context.c +++ b/citadel/context.c @@ -459,6 +459,18 @@ void CtdlFillSystemContext(CitContext *context, char *name) } } +/* + * flush it again... + */ +void CtdlClearSystemContext(void) +{ + CitContext *CCC = CC; + + FreeStrBuf(&CCC->lBuf); + memset(CCC, 0, sizeof(CitContext)); + citthread_setspecific(MyConKey, NULL); +} + /* * Cleanup any contexts that are left lying around */ diff --git a/citadel/include/ctdl_module.h b/citadel/include/ctdl_module.h index 290c90543..0db356a6f 100644 --- a/citadel/include/ctdl_module.h +++ b/citadel/include/ctdl_module.h @@ -195,7 +195,7 @@ void CtdlThreadAllocTSD(void); */ struct CitContext *CtdlGetContextArray (int *count); void CtdlFillSystemContext(struct CitContext *context, char *name); - +void CtdlClearSystemContext(void); int CtdlTrySingleUser(void); void CtdlEndSingleUser(void); int CtdlWantSingleUser(void); diff --git a/citadel/modules/smtp/serv_smtp.c b/citadel/modules/smtp/serv_smtp.c index f21225671..6bbe64718 100644 --- a/citadel/modules/smtp/serv_smtp.c +++ b/citadel/modules/smtp/serv_smtp.c @@ -1742,9 +1742,9 @@ void *smtp_do_queue(void *arg) { int num_processed = 0; struct CitContext smtp_queue_CC; + CtdlFillSystemContext(&smtp_queue_CC, "SMTP Send"); CtdlLogPrintf(CTDL_INFO, "SMTP client: processing outbound queue\n"); - CtdlFillSystemContext(&smtp_queue_CC, "SMTP Send"); citthread_setspecific(MyConKey, (void *)&smtp_queue_CC ); if (CtdlGetRoom(&CC->room, SMTP_SPOOLOUT_ROOM) != 0) { @@ -1756,6 +1756,8 @@ void *smtp_do_queue(void *arg) { citthread_mutex_unlock (&smtp_send_lock); CtdlLogPrintf(CTDL_INFO, "SMTP client: queue run completed; %d messages processed\n", num_processed); + + CtdlClearSystemContext(); return(NULL); } -- 2.30.2