aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/manager.c5
-rw-r--r--res/res_smdi.c7
2 files changed, 12 insertions, 0 deletions
diff --git a/main/manager.c b/main/manager.c
index 1932fde9a..32884b7be 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -360,6 +360,11 @@ static void purge_events(void)
}
AST_RWLIST_TRAVERSE_SAFE_BEGIN(&all_events, ev, eq_next) {
+ /* Never release the last event */
+ if (!AST_RWLIST_NEXT(ev, eq_next)) {
+ break;
+ }
+
/* 2.5 times whatever the HTTP timeout is (maximum 2.5 hours) is the maximum time that we will definitely cache an event */
if (ev->usecount == 0 && ast_tvdiff_sec(now, ev->tv) > (httptimeout > 3600 ? 3600 : httptimeout) * 2.5) {
AST_RWLIST_REMOVE_CURRENT(eq_next);
diff --git a/res/res_smdi.c b/res/res_smdi.c
index 669b06521..f0fa6f473 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -58,6 +58,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define SMDI_MSG_EXPIRY_TIME 30000 /* 30 seconds */
static const char config_file[] = "smdi.conf";
+static int smdi_loaded;
/*! \brief SMDI message desk message queue. */
struct ast_smdi_md_queue {
@@ -1340,6 +1341,7 @@ static int _unload_module(int fromload);
static int load_module(void)
{
int res;
+ smdi_loaded = 1;
/* initialize our containers */
memset(&smdi_ifaces, 0, sizeof(smdi_ifaces));
@@ -1367,6 +1369,10 @@ static int load_module(void)
static int _unload_module(int fromload)
{
+ if (!smdi_loaded) {
+ return 0;
+ }
+
/* this destructor stops any running smdi_read threads */
ASTOBJ_CONTAINER_DESTROYALL(&smdi_ifaces, ast_smdi_interface_destroy);
ASTOBJ_CONTAINER_DESTROY(&smdi_ifaces);
@@ -1387,6 +1393,7 @@ static int _unload_module(int fromload)
ast_custom_function_unregister(&smdi_msg_function);
}
+ smdi_loaded = 0;
return 0;
}