diff --git a/mbuni/mmlib/mms_strings.c b/mbuni/mmlib/mms_strings.c index 8099393..42409be 100644 --- a/mbuni/mmlib/mms_strings.c +++ b/mbuni/mmlib/mms_strings.c @@ -231,6 +231,7 @@ void mms_strings_init(void) void mms_strings_shutdown(void) { + wsp_strings_shutdown(); /* If we were initialized more than once, then wait for more than * one shutdown. */ if (initialized > 1) { diff --git a/mbuni/mmlib/mms_strings.h b/mbuni/mmlib/mms_strings.h index 346d2e8..f369bc1 100644 --- a/mbuni/mmlib/mms_strings.h +++ b/mbuni/mmlib/mms_strings.h @@ -39,4 +39,5 @@ long mms_string_to_versioned_##name(Octstr *ostr, int version); #include "wap/wsp_strings.h" void mms_strings_init(void); +void mms_strings_shutdown(void); #endif diff --git a/mbuni/mmlib/mms_util.c b/mbuni/mmlib/mms_util.c index 8f3cc74..2c75c49 100644 --- a/mbuni/mmlib/mms_util.c +++ b/mbuni/mmlib/mms_util.c @@ -216,6 +216,12 @@ void mms_lib_init(void) } +void mms_lib_shutdown(void) +{ + mms_strings_shutdown(); + gwlib_shutdown(); +} + static void strip_quotes(Octstr *s) { int l = s ? octstr_len(s) : 0; diff --git a/mbuni/mmlib/mms_util.h b/mbuni/mmlib/mms_util.h index 49d40cc..638284f 100644 --- a/mbuni/mmlib/mms_util.h +++ b/mbuni/mmlib/mms_util.h @@ -63,6 +63,7 @@ Octstr *mms_find_sender_ip(List *request_hdrs, Octstr *ip_header, Octstr *ip, in extern Octstr *mms_isodate(time_t t); void mms_lib_init(void); +void mms_lib_shutdown(void); /* get content type while stripping params. If any param is null, fails. */ int get_content_type(List *hdrs, Octstr **type, Octstr **params); diff --git a/mbuni/mmsbox/mmsbox.c b/mbuni/mmsbox/mmsbox.c index 368b0de..ff81482 100644 --- a/mbuni/mmsbox/mmsbox.c +++ b/mbuni/mmsbox/mmsbox.c @@ -508,6 +508,7 @@ int main(int argc, char *argv[]) if (sendmms_port.port > 0) gwthread_join(sthread); sleep(2); + mms_lib_shutdown(); return 0; } diff --git a/mbuni/mmsc/mms_billing_shell.c b/mbuni/mmsc/mms_billing_shell.c index 11a62c2..bc43b10 100644 --- a/mbuni/mmsc/mms_billing_shell.c +++ b/mbuni/mmsc/mms_billing_shell.c @@ -26,7 +26,11 @@ static void *mms_billingmodule_init(char *settings) static int mms_billingmodule_fini(void *module_data) { - return 0; + if (script) { + octstr_destroy(script); + script = NULL; + } + return 0; } static double mms_billmsg(Octstr *from, List *to, unsigned long msg_size, Octstr *vaspid, void *module_data) diff --git a/mbuni/mmsc/mms_detokenize_shell.c b/mbuni/mmsc/mms_detokenize_shell.c index 698b634..89f93ae 100644 --- a/mbuni/mmsc/mms_detokenize_shell.c +++ b/mbuni/mmsc/mms_detokenize_shell.c @@ -27,6 +27,11 @@ static int mms_detokenizer_init(char *settings) static int mms_detokenizer_fini(void) { + if (script) { + octstr_destroy(script); + script = NULL; + } + return 0; } diff --git a/mbuni/mmsc/mmsfromemail.c b/mbuni/mmsc/mmsfromemail.c index eea9fba..45a9a0d 100644 --- a/mbuni/mmsc/mmsfromemail.c +++ b/mbuni/mmsc/mmsfromemail.c @@ -64,6 +64,8 @@ int main(int argc, char *argv[]) /* Load settings. */ settings = mms_load_mmsc_settings(cfg, &proxyrelays); + cfg_destroy(cfg); + if (!settings) panic(0, "No global MMSC configuration!"); @@ -80,6 +82,7 @@ int main(int argc, char *argv[]) (ttype == TPLMN && !does_prefix_match(settings->email2mmsrelay_prefixes, xto))) { error(0, " Not allowed to send to this recipient %s!", xto ? octstr_get_cstr(xto) : "(null)"); + mms_lib_shutdown(); return -1; } @@ -88,11 +91,13 @@ int main(int argc, char *argv[]) if (!email || octstr_len(email) == 0) { error(0, "Empty email message!"); + mms_lib_shutdown(); return -1; } if ((mm = mime_octstr_to_entity(email)) == NULL) { error(0, "Unable to decode mime entity!"); + mms_lib_shutdown(); return -1; } octstr_destroy(email); @@ -112,6 +117,7 @@ int main(int argc, char *argv[]) if (!msg) { error(0, "Unable to create MM!"); + mms_lib_shutdown(); return -1; } @@ -309,6 +315,7 @@ int main(int argc, char *argv[]) } } mms_destroy(msg); + mms_lib_shutdown(); return 0; diff --git a/mbuni/mmsc/mmsproxy.c b/mbuni/mmsc/mmsproxy.c index 6cdf339..53838bc 100644 --- a/mbuni/mmsc/mmsproxy.c +++ b/mbuni/mmsc/mmsproxy.c @@ -224,6 +224,7 @@ int main(int argc, char *argv[]) sleep(2); /* Give them time to shut down. */ mms_stop_profile_engine(); sleep(2); /* Give them time to shut down. */ + mms_lib_shutdown(); return 0; } diff --git a/mbuni/mmsc/mmsrelay.c b/mbuni/mmsc/mmsrelay.c index 05969c1..73315c3 100644 --- a/mbuni/mmsc/mmsrelay.c +++ b/mbuni/mmsc/mmsrelay.c @@ -84,6 +84,7 @@ int main(int argc, char *argv[]) mms_stop_profile_engine(); /* Stop profile stuff. */ sleep(2); /* Wait for them to die. */ + mms_lib_shutdown(); return 0; }; diff --git a/mbuni/mmsc/mmssend.c b/mbuni/mmsc/mmssend.c index f2ff5e2..e7f5b83 100644 --- a/mbuni/mmsc/mmssend.c +++ b/mbuni/mmsc/mmssend.c @@ -105,6 +105,8 @@ int main(int argc, char *argv[]) /* Load settings. */ settings = mms_load_mmsc_settings(cfg, &proxyrelays); + cfg_destroy(cfg); + if (!settings) panic(0, "No global MMSC configuration!"); @@ -155,5 +157,6 @@ int main(int argc, char *argv[]) printf("Queued: %s, mmbox=%s\n", octstr_get_cstr(s), mmbox ? octstr_get_cstr(mmbox) : ""); octstr_destroy(s); + mms_lib_shutdown(); return 0; }