From 63ab6ebd84d0143f75f3f188231586ac41479426 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sun, 31 Aug 2008 20:10:34 +0000 Subject: [PATCH] * cleanup shutdown procedure; free all structures and their properties --- webcit/gettext.c | 1 - webcit/subst.c | 19 ++++++++++++++++--- webcit/webserver.c | 40 ++++++++++++++++++++++++---------------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/webcit/gettext.c b/webcit/gettext.c index aaa83df34..ea810deb3 100644 --- a/webcit/gettext.c +++ b/webcit/gettext.c @@ -328,7 +328,6 @@ void ShutdownLocale(void) if (Empty_Locale != wc_locales[i]) freelocale(wc_locales[i]); } - freelocale(Empty_Locale); #endif } diff --git a/webcit/subst.c b/webcit/subst.c index 8a7cc2bc0..a71896f92 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -466,7 +466,7 @@ void PutNewToken(WCTemplate *Template, WCTemplateToken *NewToken) Template->Tokens[(Template->nTokensUsed)++] = NewToken; } -TemplateParam *GetNextParamter(StrBuf *Buf, const char **pCh, const char *pe) +TemplateParam *GetNextParameter(StrBuf *Buf, const char **pCh, const char *pe) { const char *pch = *pCh; const char *pchs, *pche; @@ -568,7 +568,7 @@ WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf, NewToken->NameEnd = pch - NewToken->pName; pch ++; while (pch < pTmplEnd - 1) { - Param = GetNextParamter(Buf, &pch, pTmplEnd - 1); + Param = GetNextParameter(Buf, &pch, pTmplEnd - 1); if (Param != NULL) { NewToken->HaveParameters = 1; if (NewToken->nParameters > MAXPARAM) { @@ -600,6 +600,18 @@ WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf, return NewToken; } +void FreeToken(WCTemplateToken **Token) +{ + int i; + if ((*Token)->HaveParameters) + for (i = 0; i < (*Token)->nParameters; i++) + free((*Token)->Params[i]); + free(*Token); + *Token = NULL; +} + + + void FreeWCTemplate(void *vFreeMe) { int i; @@ -607,10 +619,11 @@ void FreeWCTemplate(void *vFreeMe) if (FreeMe->TokenSpace > 0) { for (i = 0; i < FreeMe->nTokensUsed; i ++) { - free(FreeMe->Tokens[i]); + FreeToken(&FreeMe->Tokens[i]); } free(FreeMe->Tokens); } + FreeStrBuf(&FreeMe->Data); free(FreeMe); } diff --git a/webcit/webserver.c b/webcit/webserver.c index 3e453db14..36c64a5f4 100644 --- a/webcit/webserver.c +++ b/webcit/webserver.c @@ -873,6 +873,27 @@ int main(int argc, char **argv) } +void ShutDownWebcit(void) +{ + DeleteHash(&ZoneHash); + free_zone_directory (); + icaltimezone_release_zone_tab (); + icalmemory_free_ring (); + ShutDownLibCitadel (); + DeleteHash(&HandlerHash); + DeleteHash(&PreferenceHooks); + DeleteHash(&GlobalNS); + DeleteHash(&WirelessTemplateCache); + DeleteHash(&WirelessLocalTemplateCache); + DeleteHash(&TemplateCache); + DeleteHash(&LocalTemplateCache); + DeleteHash(&Iterators); + DeleteHash(&Contitionals); +#ifdef ENABLE_NLS + ShutdownLocale(); +#endif +} + /* * Entry point for worker threads */ @@ -940,22 +961,9 @@ void worker_entry(void) lprintf(2, "master shutdown: cleaning up sessions\n"); do_housekeeping(); lprintf(2, "master shutdown: cleaning up libical\n"); - free_zone_directory (); - icaltimezone_release_zone_tab (); - icalmemory_free_ring (); - ShutDownLibCitadel (); - DeleteHash(&HandlerHash); - DeleteHash(&PreferenceHooks); - DeleteHash(&GlobalNS); - DeleteHash(&WirelessTemplateCache); - DeleteHash(&WirelessLocalTemplateCache); - DeleteHash(&TemplateCache); - DeleteHash(&LocalTemplateCache); - DeleteHash(&Iterators); - DeleteHash(&Contitionals); -#ifdef ENABLE_NLS - void ShutdownLocale(void); -#endif + + ShutDownWebcit(); + lprintf(2, "master shutdown exiting!.\n"); exit(0); } -- 2.30.2