* cleanup shutdown procedure; free all structures and their properties
authorWilfried Göesgens <willi@citadel.org>
Sun, 31 Aug 2008 20:10:34 +0000 (20:10 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 31 Aug 2008 20:10:34 +0000 (20:10 +0000)
webcit/gettext.c
webcit/subst.c
webcit/webserver.c

index aaa83df34770fe4c4061fcc514d62f6a64a5c8ba..ea810deb32e925e44f0666b1c1489e62052110ff 100644 (file)
@@ -328,7 +328,6 @@ void ShutdownLocale(void)
                if (Empty_Locale != wc_locales[i])
                        freelocale(wc_locales[i]);
        }
-       freelocale(Empty_Locale);
 #endif
 }
 
index 8a7cc2bc02ee6e9277d961d3a187ca2d9c915cad..a71896f9297d831a2e40ef08ae1c30f89b098369 100644 (file)
@@ -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);
 }
 
index 3e453db140dce5f554920728323e409327020891..36c64a5f4155863c1dc82c815361cb49216de463 100644 (file)
@@ -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);
                        }