codec_speex.c: Cleanup module loading to DECLINE and not FAILURE.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 4 Oct 2018 16:49:09 +0000 (11:49 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 4 Oct 2018 19:36:47 +0000 (14:36 -0500)
If codec_speex fails to register a translator it would cause Asterisk to
exit instead of continue as a DECLINED module.

* Make unload_module() always return 0.  It is silly to fail unloading if
any translators we try to unregister were not even registered.

Change-Id: Ia262591f68333dad17673ba7104d11c88096f51a

codecs/codec_speex.c

index 591fce9..0354bd5 100644 (file)
@@ -689,39 +689,37 @@ static int reload(void)
 
 static int unload_module(void)
 {
-       int res = 0;
-
-       res |= ast_unregister_translator(&speextolin);
-       res |= ast_unregister_translator(&lintospeex);
-       res |= ast_unregister_translator(&speexwbtolin16);
-       res |= ast_unregister_translator(&lin16tospeexwb);
-       res |= ast_unregister_translator(&speexuwbtolin32);
-       res |= ast_unregister_translator(&lin32tospeexuwb);
+       ast_unregister_translator(&speextolin);
+       ast_unregister_translator(&lintospeex);
+       ast_unregister_translator(&speexwbtolin16);
+       ast_unregister_translator(&lin16tospeexwb);
+       ast_unregister_translator(&speexuwbtolin32);
+       ast_unregister_translator(&lin32tospeexuwb);
 
-
-       return res;
+       return 0;
 }
 
 static int load_module(void)
 {
        int res = 0;
 
-       if (parse_config(0))
+       if (parse_config(0)) {
                return AST_MODULE_LOAD_DECLINE;
+       }
 
+       /* XXX It is most likely a bug in this module if we fail to register a translator */
        res |= ast_register_translator(&speextolin);
        res |= ast_register_translator(&lintospeex);
        res |= ast_register_translator(&speexwbtolin16);
        res |= ast_register_translator(&lin16tospeexwb);
        res |= ast_register_translator(&speexuwbtolin32);
        res |= ast_register_translator(&lin32tospeexuwb);
-
        if (res) {
                unload_module();
-               return res;
+               return AST_MODULE_LOAD_DECLINE;
        }
 
-       return res;
+       return AST_MODULE_LOAD_SUCCESS;
 }
 
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Speex Coder/Decoder",