From: Corey Farrell Date: Mon, 4 May 2015 02:03:13 +0000 (-0400) Subject: Format Interfaces: Prevent unload except by shutdown. X-Git-Tag: 13.4.0-rc1~54^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f38066fcad559da3f214b4d309dcc4b070665d66;p=thirdparty%2Fasterisk.git Format Interfaces: Prevent unload except by shutdown. Format interfaces cannot be unregistered, so the modules that provide them need to be held open except by shutdown. ASTERISK-25054 #close Reported by: Corey Farrell Change-Id: Iadbd9675bf0d30b8fded5a739b163db3ea2db8f3 --- diff --git a/main/format.c b/main/format.c index 3e1ee866ec..148c77f8d8 100644 --- a/main/format.c +++ b/main/format.c @@ -36,6 +36,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/format.h" #include "asterisk/astobj2.h" #include "asterisk/strings.h" +#include "asterisk/module.h" /*! \brief Number of buckets to use for format interfaces (should be prime for performance reasons) */ #define FORMAT_INTERFACE_BUCKETS 53 @@ -156,6 +157,8 @@ int __ast_format_interface_register(const char *codec, const struct ast_format_i format_interface->interface = interface; strcpy(format_interface->codec, codec); /* Safe */ + /* Once registered a format interface cannot be unregistered. */ + ast_module_shutdown_ref(mod); ao2_link_flags(interfaces, format_interface, OBJ_NOLOCK); ao2_ref(format_interface, -1);