[Asterisk-code-review] func periodic hook.c: Cleanup module resources on failure. (asterisk[13])

Richard Mudgett asteriskteam at digium.com
Thu Oct 4 14:41:50 CDT 2018


Richard Mudgett has uploaded this change for review. ( https://gerrit.asterisk.org/10440


Change subject: func_periodic_hook.c: Cleanup module resources on failure.
......................................................................

func_periodic_hook.c: Cleanup module resources on failure.

* Make load_module() cleanup if it failed to setup the module.

* Make unload_module() always return 0.  It is silly to fail unloading if
the hook function we try to unregister was not even registered.

Change-Id: I280fc6e8ba2a7ee2588ca01d870eebaf74b4ffe6
---
M funcs/func_periodic_hook.c
1 file changed, 17 insertions(+), 13 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/40/10440/1

diff --git a/funcs/func_periodic_hook.c b/funcs/func_periodic_hook.c
index 0e260c9..ce0ca1a 100644
--- a/funcs/func_periodic_hook.c
+++ b/funcs/func_periodic_hook.c
@@ -450,7 +450,8 @@
 {
 	ast_context_destroy(NULL, AST_MODULE);
 
-	return ast_custom_function_unregister(&hook_function);
+	ast_custom_function_unregister(&hook_function);
+	return 0;
 }
 
 static int load_module(void)
@@ -465,37 +466,40 @@
 	/*
 	 * Based on a handy recipe from the Asterisk Cookbook.
 	 */
-	ast_add_extension(context_name, 1, exten_name, 1, "", "",
+	res = ast_add_extension(context_name, 1, exten_name, 1, "", "",
 			"Set", "EncodedChannel=${CUT(HOOK_CHANNEL,-,1-2)}",
 			NULL, AST_MODULE);
-	ast_add_extension(context_name, 1, exten_name, 2, "", "",
+	res |= ast_add_extension(context_name, 1, exten_name, 2, "", "",
 			"Set", "GROUP_NAME=${EncodedChannel}${HOOK_ID}",
 			NULL, AST_MODULE);
-	ast_add_extension(context_name, 1, exten_name, 3, "", "",
+	res |= ast_add_extension(context_name, 1, exten_name, 3, "", "",
 			"Set", "GROUP(periodic-hook)=${GROUP_NAME}",
 			NULL, AST_MODULE);
-	ast_add_extension(context_name, 1, exten_name, 4, "", "", "ExecIf",
+	res |= ast_add_extension(context_name, 1, exten_name, 4, "", "", "ExecIf",
 			"$[${GROUP_COUNT(${GROUP_NAME}@periodic-hook)} > 1]?Hangup()",
 			NULL, AST_MODULE);
-	ast_add_extension(context_name, 1, exten_name, 5, "", "",
+	res |= ast_add_extension(context_name, 1, exten_name, 5, "", "",
 			"Set", "ChannelToSpy=${URIDECODE(${EncodedChannel})}",
 			NULL, AST_MODULE);
-	ast_add_extension(context_name, 1, exten_name, 6, "", "",
+	res |= ast_add_extension(context_name, 1, exten_name, 6, "", "",
 			"ChanSpy", "${ChannelToSpy},qEB", NULL, AST_MODULE);
 
-	res = ast_add_extension(context_name, 1, beep_exten, 1, "", "",
+	res |= ast_add_extension(context_name, 1, beep_exten, 1, "", "",
 			"Answer", "", NULL, AST_MODULE);
 	res |= ast_add_extension(context_name, 1, beep_exten, 2, "", "",
 			"Playback", "beep", NULL, AST_MODULE);
 
-	res = ast_custom_function_register_escalating(&hook_function, AST_CFE_BOTH);
+	res |= ast_custom_function_register_escalating(&hook_function, AST_CFE_BOTH);
 
-	if (!res) {
-		/* For Optional API. */
-		ast_module_shutdown_ref(ast_module_info->self);
+	if (res) {
+		unload_module();
+		return AST_MODULE_LOAD_DECLINE;
 	}
 
-	return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
+	/* For Optional API. */
+	ast_module_shutdown_ref(ast_module_info->self);
+
+	return AST_MODULE_LOAD_SUCCESS;
 }
 
 int AST_OPTIONAL_API_NAME(ast_beep_start)(struct ast_channel *chan,

-- 
To view, visit https://gerrit.asterisk.org/10440
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: I280fc6e8ba2a7ee2588ca01d870eebaf74b4ffe6
Gerrit-Change-Number: 10440
Gerrit-PatchSet: 1
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20181004/5b1074f5/attachment-0001.html>


More information about the asterisk-code-review mailing list