[Asterisk-code-review] Prevent unload of modules which implement an Optional API. (asterisk[master])

Joshua Colp asteriskteam at digium.com
Mon Nov 6 10:11:52 CST 2017


Joshua Colp has submitted this change and it was merged. ( https://gerrit.asterisk.org/6957 )

Change subject: Prevent unload of modules which implement an Optional API.
......................................................................

Prevent unload of modules which implement an Optional API.

Once an Optional API module is loaded it should stay loaded.  Unloading
an optional API module runs the risk of a crash if something else is
using it.  This patch causes all optional API providers to tell the
module loader not to unload except at shutdown.

ASTERISK-27389

Change-Id: Ia07786fe655681aec49cc8d3d96e06483b11f5e6
---
M funcs/func_periodic_hook.c
M res/res_agi.c
M res/res_http_websocket.c
M res/res_monitor.c
M res/res_pktccops.c
M res/res_smdi.c
M res/res_statsd.c
7 files changed, 26 insertions(+), 0 deletions(-)

Approvals:
  George Joseph: Looks good to me, but someone else must approve
  Joshua Colp: Looks good to me, approved; Approved for Submit



diff --git a/funcs/func_periodic_hook.c b/funcs/func_periodic_hook.c
index f8e79b3..0ab3d6b 100644
--- a/funcs/func_periodic_hook.c
+++ b/funcs/func_periodic_hook.c
@@ -488,6 +488,11 @@
 
 	res = ast_custom_function_register_escalating(&hook_function, AST_CFE_BOTH);
 
+	if (!res) {
+		/* For Optional API. */
+		ast_module_shutdown_ref(AST_MODULE_SELF);
+	}
+
 	return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_agi.c b/res/res_agi.c
index 4660635..91f270c 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -4713,6 +4713,10 @@
 		unload_module();
 		return AST_MODULE_LOAD_DECLINE;
 	}
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 60332f5..8e9aae9 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -1446,6 +1446,9 @@
 	ast_http_uri_link(&websocketuri);
 	websocket_add_protocol_internal("echo", websocket_echo_callback);
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_monitor.c b/res/res_monitor.c
index 3e3611b..aed5a26 100644
--- a/res/res_monitor.c
+++ b/res/res_monitor.c
@@ -984,6 +984,9 @@
 	ast_manager_register_xml("PauseMonitor", EVENT_FLAG_CALL, pause_monitor_action);
 	ast_manager_register_xml("UnpauseMonitor", EVENT_FLAG_CALL, unpause_monitor_action);
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_pktccops.c b/res/res_pktccops.c
index 4f69448..e8d266c 100644
--- a/res/res_pktccops.c
+++ b/res/res_pktccops.c
@@ -1472,6 +1472,10 @@
 	}
 	ast_cli_register_multiple(cli_pktccops, sizeof(cli_pktccops) / sizeof(struct ast_cli_entry));
 	restart_pktc_thread();
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_smdi.c b/res/res_smdi.c
index 4d72401..0edabb8 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -1405,6 +1405,10 @@
 	}
 
 	smdi_loaded = 0;
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_statsd.c b/res/res_statsd.c
index 3d7dd16..aee0bcd 100644
--- a/res/res_statsd.c
+++ b/res/res_statsd.c
@@ -353,6 +353,9 @@
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 

-- 
To view, visit https://gerrit.asterisk.org/6957
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia07786fe655681aec49cc8d3d96e06483b11f5e6
Gerrit-Change-Number: 6957
Gerrit-PatchSet: 1
Gerrit-Owner: Corey Farrell <git at cfware.com>
Gerrit-Reviewer: Corey Farrell <git at cfware.com>
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Jenkins2
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20171106/7c9cd3a1/attachment.html>


More information about the asterisk-code-review mailing list