Author: coreyfarrell
Date: Fri Feb 20 20:58:19 2015
New Revision: 432060

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432060
Log:
Allow shutdown to unload modules that register bucket scheme's or codec's.

* Change __ast_module_shutdown_ref to be NULL safe (11+).
* Allow modules that call ast_bucket_scheme_register or ast_codec_register
  to be unloaded during graceful shutdown only (13+ only).

ASTERISK-24796 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4428/
........

Merged revisions 432058 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 432059 from http://svn.asterisk.org/svn/asterisk/branches/13

Modified:
    trunk/   (props changed)
    trunk/main/bucket.c
    trunk/main/codec.c
    trunk/main/loader.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-13-merged' - no diff available.

Modified: trunk/main/bucket.c
URL: 
http://svnview.digium.com/svn/asterisk/trunk/main/bucket.c?view=diff&rev=432060&r1=432059&r2=432060
==============================================================================
--- trunk/main/bucket.c (original)
+++ trunk/main/bucket.c Fri Feb 20 20:58:19 2015
@@ -282,7 +282,7 @@
 
        ast_verb(2, "Registered bucket scheme '%s'\n", name);
 
-       ast_module_ref(module);
+       ast_module_shutdown_ref(module);
 
        return 0;
 }

Modified: trunk/main/codec.c
URL: 
http://svnview.digium.com/svn/asterisk/trunk/main/codec.c?view=diff&rev=432060&r1=432059&r2=432060
==============================================================================
--- trunk/main/codec.c (original)
+++ trunk/main/codec.c Fri Feb 20 20:58:19 2015
@@ -296,8 +296,8 @@
 
        ao2_link_flags(codecs, codec_new, OBJ_NOLOCK);
 
-       /* Once registered a codec can not be unregistered, and the module must 
persist */
-       ast_module_ref(mod);
+       /* Once registered a codec can not be unregistered, and the module must 
persist until shutdown */
+       ast_module_shutdown_ref(mod);
 
        ast_verb(2, "Registered '%s' codec '%s' at sample rate '%u' with id 
'%u'\n",
                ast_codec_media_type2str(codec->type), codec->name, 
codec->sample_rate, codec_new->id);

Modified: trunk/main/loader.c
URL: 
http://svnview.digium.com/svn/asterisk/trunk/main/loader.c?view=diff&rev=432060&r1=432059&r2=432060
==============================================================================
--- trunk/main/loader.c (original)
+++ trunk/main/loader.c Fri Feb 20 20:58:19 2015
@@ -1484,10 +1484,12 @@
 
 void __ast_module_shutdown_ref(struct ast_module *mod, const char *file, int 
line, const char *func)
 {
-       if (!mod->flags.keepuntilshutdown) {
-               __ast_module_ref(mod, file, line, func);
-               mod->flags.keepuntilshutdown = 1;
-       }
+       if (!mod || mod->flags.keepuntilshutdown) {
+               return;
+       }
+
+       __ast_module_ref(mod, file, line, func);
+       mod->flags.keepuntilshutdown = 1;
 }
 
 void __ast_module_unref(struct ast_module *mod, const char *file, int line, 
const char *func)


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to