From e43bc6634dc60ca897a848ca3301f52c74330279 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo <rizzo@icir.org> Date: Fri, 14 Apr 2006 14:08:19 +0000 Subject: [PATCH] This rather large commit changes the way modules are loaded. As partly documented in loader.c and include/asterisk/module.h, modules are now expected to return all of their methods and flags into a structure 'mod_data', and are normally loaded with RTLD_NOW | RTLD_LOCAL, so symbols are resolved immediately and conflicts should be less likely. Only in a small number of cases (res_*, typically) modules are loaded RTLD_GLOBAL, so they can export symbols. The core of the change is only the two files loader.c and include/asterisk/module.h, all the rest is simply adaptation of the existing modules to the new API, a rather mechanical (but believe me, time and finger-consuming!) process whose detail you can figure out by svn diff'ing any single module. Expect some minor compilation issue after this change, please report it on mantis http://bugs.digium.com/view.php?id=6968 so we collect all the feedback in one place. I am just sorry that this change missed SVN version number 20000! git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@20003 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_adsiprog.c | 23 +-- apps/app_alarmreceiver.c | 20 +- apps/app_amd.c | 22 +-- apps/app_authenticate.c | 22 +-- apps/app_cdr.c | 17 +- apps/app_chanisavail.c | 18 +- apps/app_channelredirect.c | 20 +- apps/app_chanspy.c | 18 +- apps/app_controlplayback.c | 22 +-- apps/app_db.c | 20 +- apps/app_dial.c | 17 +- apps/app_dictate.c | 24 +-- apps/app_directed_pickup.c | 25 +-- apps/app_directory.c | 25 +-- apps/app_disa.c | 21 +-- apps/app_dumpchan.c | 19 +- apps/app_echo.c | 17 +- apps/app_exec.c | 17 +- apps/app_externalivr.c | 22 +-- apps/app_festival.c | 21 +-- apps/app_flash.c | 21 +-- apps/app_forkcdr.c | 20 +- apps/app_getcpeid.c | 21 +-- apps/app_hasnewvoicemail.c | 20 +- apps/app_ices.c | 21 +-- apps/app_image.c | 17 +- apps/app_ivrdemo.c | 17 +- apps/app_lookupblacklist.c | 17 +- apps/app_lookupcidname.c | 25 +-- apps/app_macro.c | 17 +- apps/app_meetme.c | 23 +-- apps/app_milliwatt.c | 21 +-- apps/app_mixmonitor.c | 28 +-- apps/app_morsecode.c | 17 +- apps/app_mp3.c | 17 +- apps/app_nbscat.c | 17 +- apps/app_osplookup.c | 23 +-- apps/app_page.c | 23 +-- apps/app_parkandannounce.c | 19 +- apps/app_playback.c | 17 +- apps/app_privacy.c | 25 +-- apps/app_queue.c | 21 +-- apps/app_random.c | 17 +- apps/app_read.c | 17 +- apps/app_readfile.c | 17 +- apps/app_realtime.c | 16 +- apps/app_record.c | 22 +-- apps/app_rpt.c | 16 +- apps/app_sayunixtime.c | 17 +- apps/app_senddtmf.c | 17 +- apps/app_sendtext.c | 23 +-- apps/app_setcallerid.c | 17 +- apps/app_setcdruserfield.c | 17 +- apps/app_settransfercapability.c | 17 +- apps/app_skel.c | 33 +--- apps/app_sms.c | 17 +- apps/app_softhangup.c | 17 +- apps/app_speech_utils.c | 24 +-- apps/app_stack.c | 22 +-- apps/app_system.c | 17 +- apps/app_talkdetect.c | 17 +- apps/app_test.c | 17 +- apps/app_transfer.c | 23 +-- apps/app_url.c | 17 +- apps/app_userevent.c | 17 +- apps/app_verbose.c | 17 +- apps/app_voicemail.c | 23 +-- apps/app_waitforring.c | 17 +- apps/app_waitforsilence.c | 16 +- apps/app_while.c | 16 +- apps/app_zapateller.c | 17 +- apps/app_zapbarge.c | 17 +- apps/app_zapras.c | 17 +- apps/app_zapscan.c | 16 +- asterisk.c | 2 +- cdr.c | 2 +- cdr/cdr_csv.c | 17 +- cdr/cdr_custom.c | 18 +- cdr/cdr_manager.c | 17 +- channels/chan_agent.c | 34 ++-- channels/chan_features.c | 23 +-- channels/chan_iax2.c | 20 +- channels/chan_local.c | 36 +--- channels/chan_mgcp.c | 31 ++- channels/chan_oss.c | 15 +- channels/chan_phone.c | 15 +- channels/chan_sip.c | 17 +- channels/chan_skinny.c | 17 +- channels/chan_zap.c | 34 ++-- cli.c | 1 + codecs/codec_a_mu.c | 27 +-- codecs/codec_adpcm.c | 30 +-- codecs/codec_alaw.c | 29 +-- codecs/codec_g723_1.c | 27 +-- codecs/codec_g726.c | 28 +-- codecs/codec_gsm.c | 29 +-- codecs/codec_ilbc.c | 27 +-- codecs/codec_lpc10.c | 32 +--- codecs/codec_speex.c | 37 ++-- codecs/codec_ulaw.c | 32 +--- file.c | 25 +-- formats/format_g723.c | 19 +- formats/format_g726.c | 24 +-- formats/format_g729.c | 19 +- formats/format_gsm.c | 19 +- formats/format_h263.c | 19 +- formats/format_h264.c | 19 +- formats/format_ilbc.c | 20 +- formats/format_jpeg.c | 17 +- formats/format_ogg_vorbis.c | 20 +- formats/format_pcm.c | 23 +-- formats/format_sln.c | 19 +- formats/format_vox.c | 19 +- formats/format_wav.c | 19 +- formats/format_wav_gsm.c | 19 +- funcs/func_base64.c | 18 +- funcs/func_callerid.c | 15 +- funcs/func_cdr.c | 15 +- funcs/func_channel.c | 15 +- funcs/func_curl.c | 17 +- funcs/func_cut.c | 17 +- funcs/func_db.c | 15 +- funcs/func_enum.c | 18 +- funcs/func_env.c | 14 +- funcs/func_groupcount.c | 15 +- funcs/func_language.c | 15 +- funcs/func_logic.c | 15 +- funcs/func_math.c | 16 +- funcs/func_md5.c | 15 +- funcs/func_moh.c | 15 +- funcs/func_odbc.c | 19 +- funcs/func_rand.c | 14 +- funcs/func_sha1.c | 15 +- funcs/func_strings.c | 14 +- funcs/func_timeout.c | 13 +- funcs/func_uri.c | 14 +- include/asterisk.h | 24 ++- include/asterisk/file.h | 2 +- include/asterisk/module.h | 312 +++++++------------------------ include/asterisk/translate.h | 6 +- loader.c | 168 +++++++++-------- pbx/pbx_ael.c | 20 +- pbx/pbx_config.c | 23 +-- pbx/pbx_dundi.c | 27 +-- pbx/pbx_loopback.c | 18 +- pbx/pbx_realtime.c | 17 +- pbx/pbx_spool.c | 18 +- res/res_adsi.c | 18 +- res/res_agi.c | 26 +-- res/res_clioriginate.c | 28 ++- res/res_config_odbc.c | 19 +- res/res_config_pgsql.c | 17 +- res/res_convert.c | 24 +-- res/res_crypto.c | 17 +- res/res_features.c | 29 +-- res/res_indications.c | 24 +-- res/res_monitor.c | 25 +-- res/res_musiconhold.c | 25 +-- res/res_odbc.c | 20 +- res/res_smdi.c | 33 ++-- res/res_speech.c | 25 +-- translate.c | 24 ++- 162 files changed, 1272 insertions(+), 2385 deletions(-) diff --git a/apps/app_adsiprog.c b/apps/app_adsiprog.c index 0ac46181f3..ff3817032a 100644 --- a/apps/app_adsiprog.c +++ b/apps/app_adsiprog.c @@ -59,8 +59,6 @@ static char *descrip = " ADSIProg(script): This application programs an ADSI Phone with the given\n" "script. If nothing is specified, the default script (asterisk.adsi) is used.\n"; -LOCAL_USER_DECL; - struct adsi_event { int id; char *name; @@ -1568,35 +1566,32 @@ static int adsi_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; + STANDARD_HANGUP_LOCALUSERS; + res = ast_unregister_application(app); - STANDARD_HANGUP_LOCALUSERS; return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, adsi_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Asterisk ADSI Programming Application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_alarmreceiver.c b/apps/app_alarmreceiver.c index e268458861..2754be4f40 100644 --- a/apps/app_alarmreceiver.c +++ b/apps/app_alarmreceiver.c @@ -97,8 +97,6 @@ static char time_stamp_format[128] = {"%a %b %d, %Y @ %H:%M:%S %Z"}; static char event_file[14] = "/event-XXXXXX"; -LOCAL_USER_DECL; - /* * Attempt to access a database variable and increment it, * provided that the user defined db-family in alarmreceiver.conf @@ -818,7 +816,7 @@ static int load_config(void) */ -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -829,25 +827,21 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; load_config(); return ast_register_application(app, alarmreceiver_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Alarm Receiver for Asterisk"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_amd.c b/apps/app_amd.c index c054b2abf4..16fc6bf64d 100644 --- a/apps/app_amd.c +++ b/apps/app_amd.c @@ -72,9 +72,6 @@ static char *descrip = " MAXWORDS-<%d wordsCount>-<%d maximumNumberOfWords>\n" " LONGGREETING-<%d voiceDuration>-<%d greeting>\n"; - -LOCAL_USER_DECL; - #define STATE_IN_WORD 1 #define STATE_IN_SILENCE 2 @@ -392,38 +389,33 @@ static void load_config(void) return; } -int unload_module(void) +static int unload_module(void *mod) { STANDARD_HANGUP_LOCALUSERS; return ast_unregister_application(app); } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; load_config(); return ast_register_application(app, amd_exec, synopsis, descrip); } -int reload(void) +static int reload(void *mod) { load_config(); return 0; } -const char *description(void) +static const char *description(void) { return "Answering Machine Detection Application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/apps/app_authenticate.c b/apps/app_authenticate.c index 259789747f..eb3b7184d4 100644 --- a/apps/app_authenticate.c +++ b/apps/app_authenticate.c @@ -91,8 +91,6 @@ static char *descrip = " Defaults to 0 - no limit - wait for the user press the '#' key.\n" ; -LOCAL_USER_DECL; - static int auth_exec(struct ast_channel *chan, void *data) { int res=0; @@ -235,35 +233,31 @@ static int auth_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; + STANDARD_HANGUP_LOCALUSERS; + res = ast_unregister_application(app); - STANDARD_HANGUP_LOCALUSERS; return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, auth_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Authentication Application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_cdr.c b/apps/app_cdr.c index 0364bb4d98..ebf44bfe5c 100644 --- a/apps/app_cdr.c +++ b/apps/app_cdr.c @@ -28,8 +28,6 @@ #include <sys/types.h> #include <stdlib.h> -#define STATIC_MODULE - #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -63,7 +61,7 @@ static int nocdr_exec(struct ast_channel *chan, void *data) return 0; } -STATIC_MODULE int unload_module(void) +static int unload_module(void *mod) { int res; @@ -74,24 +72,17 @@ STATIC_MODULE int unload_module(void) return res; } -STATIC_MODULE int load_module(void) +static int load_module(void *mod) { return ast_register_application(nocdr_app, nocdr_exec, nocdr_synopsis, nocdr_descrip); } -STATIC_MODULE const char *description(void) +static const char *description(void) { return "Tell Asterisk to not maintain a CDR for the current call"; } -STATIC_MODULE int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -STATIC_MODULE const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } diff --git a/apps/app_chanisavail.c b/apps/app_chanisavail.c index 847cfc114e..3cba77c4ac 100644 --- a/apps/app_chanisavail.c +++ b/apps/app_chanisavail.c @@ -155,7 +155,7 @@ static int chanavail_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -166,24 +166,20 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, chanavail_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Check channel availability"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_channelredirect.c b/apps/app_channelredirect.c index f527b7d385..4817ec222e 100644 --- a/apps/app_channelredirect.c +++ b/apps/app_channelredirect.c @@ -120,7 +120,7 @@ static int asyncgoto_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -131,26 +131,20 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, asyncgoto_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Channel Redirect"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c index 27ca2d3c37..37daa81627 100644 --- a/apps/app_chanspy.c +++ b/apps/app_chanspy.c @@ -554,7 +554,7 @@ static int chanspy_exec(struct ast_channel *chan, void *data) ALL_DONE(u, res); } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -565,24 +565,20 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, chanspy_exec, synopsis, desc); } -const char *description(void) +static const char *description(void) { return (char *) synopsis; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_controlplayback.c b/apps/app_controlplayback.c index 5d70cc452e..4d47b3e88d 100644 --- a/apps/app_controlplayback.c +++ b/apps/app_controlplayback.c @@ -154,36 +154,26 @@ static int controlplayback_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; - res = ast_unregister_application(app); - - STANDARD_HANGUP_LOCALUSERS; - return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, controlplayback_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Control Playback Application"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_db.c b/apps/app_db.c index 38b7c6ade9..bb4bcbd9c3 100644 --- a/apps/app_db.c +++ b/apps/app_db.c @@ -143,41 +143,35 @@ static int del_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int retval; retval = ast_unregister_application(dt_app); retval |= ast_unregister_application(d_app); - STANDARD_HANGUP_LOCALUSERS; - return retval; } -int load_module(void) +static int load_module(void *mod) { int retval; + __mod_desc = mod; retval = ast_register_application(d_app, del_exec, d_synopsis, d_descrip); retval |= ast_register_application(dt_app, deltree_exec, dt_synopsis, dt_descrip); return retval; } -const char *description(void) +static const char *description(void) { return "Database Access Functions"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_dial.c b/apps/app_dial.c index 5f9e55ab64..58e3c3e0e9 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -35,7 +35,6 @@ #include <sys/signal.h> #include <netinet/in.h> -#define STATIC_MODULE #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -1729,7 +1728,7 @@ static int retrydial_exec(struct ast_channel *chan, void *data) } -STATIC_MODULE int unload_module(void) +static int unload_module(void *mod) { int res; @@ -1741,30 +1740,24 @@ STATIC_MODULE int unload_module(void) return res; } -STATIC_MODULE int load_module(void) +static int load_module(void *mod) { int res; + __mod_desc = mod; res = ast_register_application(app, dial_exec, synopsis, descrip); res |= ast_register_application(rapp, retrydial_exec, rsynopsis, rdescrip); return res; } -STATIC_MODULE const char *description(void) +static const char *description(void) { return "Dialing Application"; } -STATIC_MODULE int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -STATIC_MODULE const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } diff --git a/apps/app_dictate.c b/apps/app_dictate.c index 871fc5a333..95f8140967 100644 --- a/apps/app_dictate.c +++ b/apps/app_dictate.c @@ -46,7 +46,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/app.h" -static char *tdesc = "Virtual Dictation Machine"; static char *app = "Dictate"; static char *synopsis = "Virtual Dictation Machine"; static char *desc = " Dictate([<base_dir>[|<filename>]])\n" @@ -336,36 +335,27 @@ static int dictate_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; - res = ast_unregister_application(app); - - STANDARD_HANGUP_LOCALUSERS; - return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, dictate_exec, synopsis, desc); } -const char *description(void) -{ - return tdesc; -} - -int usecount(void) +static const char *description(void) { - int res; - STANDARD_USECOUNT(res); - return res; + return "Virtual Dictation Machine"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_directed_pickup.c b/apps/app_directed_pickup.c index a8ef0e1c0e..e75e34a265 100644 --- a/apps/app_directed_pickup.c +++ b/apps/app_directed_pickup.c @@ -42,7 +42,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/app.h" -static const char *tdesc = "Directed Call Pickup Application"; static const char *app = "Pickup"; static const char *synopsis = "Directed Call Pickup"; static const char *descrip = @@ -134,37 +133,29 @@ static int pickup_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; res = ast_unregister_application(app); - STANDARD_HANGUP_LOCALUSERS; - return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, pickup_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Directed Call Pickup Application"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/apps/app_directory.c b/apps/app_directory.c index 88399897bd..316720088a 100644 --- a/apps/app_directory.c +++ b/apps/app_directory.c @@ -45,7 +45,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/utils.h" #include "asterisk/app.h" -static char *tdesc = "Extension Directory"; static char *app = "Directory"; static char *synopsis = "Provide directory of voicemail extensions"; @@ -517,35 +516,27 @@ static int directory_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; - res = ast_unregister_application(app); - - STANDARD_HANGUP_LOCALUSERS; - return res; } -int load_module(void) +static int load_module(void *mod) { + __mod_desc = mod; return ast_register_application(app, directory_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Extension Directory"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_disa.c b/apps/app_disa.c index 29b1157892..d7c3a5872c 100644 --- a/apps/app_disa.c +++ b/apps/app_disa.c @@ -49,8 +49,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/callerid.h" #include "asterisk/stringfields.h" -static char *tdesc = "DISA (Direct Inward System Access) Application"; - static char *app = "DISA"; static char *synopsis = "DISA (Direct Inward System Access)"; @@ -376,7 +374,7 @@ reorder: return -1; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -387,24 +385,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, disa_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "DISA (Direct Inward System Access) Application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_dumpchan.c b/apps/app_dumpchan.c index e6968c89bd..aa8854620f 100644 --- a/apps/app_dumpchan.c +++ b/apps/app_dumpchan.c @@ -46,7 +46,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/utils.h" -static char *tdesc = "Dump Info About The Calling Channel"; static char *app = "DumpChan"; static char *synopsis = "Dump Info About The Calling Channel"; static char *desc = @@ -157,7 +156,7 @@ static int dumpchan_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -168,25 +167,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, dumpchan_exec, synopsis, desc); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Dump Info About The Calling Channel"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/apps/app_echo.c b/apps/app_echo.c index 803c1b5927..183f843fe6 100644 --- a/apps/app_echo.c +++ b/apps/app_echo.c @@ -95,7 +95,7 @@ static int echo_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -106,24 +106,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, echo_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_exec.c b/apps/app_exec.c index 3f8c18b0ef..33775ea72b 100644 --- a/apps/app_exec.c +++ b/apps/app_exec.c @@ -160,7 +160,7 @@ static int tryexec_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -172,26 +172,21 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = ast_register_application(app_exec, exec_exec, exec_synopsis, exec_descrip); res |= ast_register_application(app_tryexec, tryexec_exec, tryexec_synopsis, tryexec_descrip); return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c index 1c378fcf2e..ef35637c95 100644 --- a/apps/app_externalivr.c +++ b/apps/app_externalivr.c @@ -51,7 +51,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/app.h" #include "asterisk/utils.h" -static const char *tdesc = "External IVR Interface Application"; static const char *app = "ExternalIVR"; @@ -551,7 +550,7 @@ static int app_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -562,26 +561,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, app_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "External IVR Interface Application"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_festival.c b/apps/app_festival.c index ca65130fc5..f06cbaef3f 100644 --- a/apps/app_festival.c +++ b/apps/app_festival.c @@ -58,8 +58,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define FESTIVAL_CONFIG "festival.conf" -static char *tdesc = "Simple Festival Interface"; - static char *app = "Festival"; static char *synopsis = "Say text to the user"; @@ -501,7 +499,7 @@ static int festival_exec(struct ast_channel *chan, void *vdata) } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -512,25 +510,20 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { - return ast_register_application(app, festival_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; -} + return "Simple Festival Interface"; -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_flash.c b/apps/app_flash.c index e056b723ef..0e3eba4dd7 100644 --- a/apps/app_flash.c +++ b/apps/app_flash.c @@ -50,8 +50,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/image.h" #include "asterisk/options.h" -static char *tdesc = "Flash zap trunk application"; - static char *app = "Flash"; static char *synopsis = "Flashes a Zap Trunk"; @@ -107,7 +105,7 @@ static int flash_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -118,24 +116,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, flash_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Flash zap trunk application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_forkcdr.c b/apps/app_forkcdr.c index 08aca6aac9..68951b0388 100644 --- a/apps/app_forkcdr.c +++ b/apps/app_forkcdr.c @@ -42,7 +42,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/cdr.h" #include "asterisk/module.h" -static char *tdesc = "Fork The CDR into 2 separate entities."; static char *app = "ForkCDR"; static char *synopsis = "Forks the Call Data Record"; @@ -98,7 +97,7 @@ static int forkcdr_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -109,24 +108,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, forkcdr_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Fork The CDR into 2 separate entities."; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_getcpeid.c b/apps/app_getcpeid.c index e9ada0b6f7..5baab86765 100644 --- a/apps/app_getcpeid.c +++ b/apps/app_getcpeid.c @@ -43,8 +43,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/adsi.h" #include "asterisk/options.h" -static char *tdesc = "Get ADSI CPE ID"; - static char *app = "GetCPEID"; static char *synopsis = "Get ADSI CPE ID"; @@ -133,7 +131,7 @@ static int cpeid_exec(struct ast_channel *chan, void *idata) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -144,24 +142,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, cpeid_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Get ADSI CPE ID"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_hasnewvoicemail.c b/apps/app_hasnewvoicemail.c index 96b67072eb..f21bd7ae6c 100644 --- a/apps/app_hasnewvoicemail.c +++ b/apps/app_hasnewvoicemail.c @@ -53,7 +53,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/app.h" #include "asterisk/options.h" -static char *tdesc = "Indicator for whether a voice mailbox has messages in a given folder."; static char *app_hasvoicemail = "HasVoicemail"; static char *hasvoicemail_synopsis = "Conditionally branches to priority + 101 with the right options set"; static char *hasvoicemail_descrip = @@ -219,7 +218,7 @@ struct ast_custom_function acf_vmcount = { .read = acf_vmcount_exec, }; -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -232,7 +231,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -243,19 +242,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Indicator for whether a voice mailbox has messages in a given folder."; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_ices.c b/apps/app_ices.c index ae48cbb67c..3a8130ab64 100644 --- a/apps/app_ices.c +++ b/apps/app_ices.c @@ -50,8 +50,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define ICES "/usr/bin/ices" #define LOCAL_ICES "/usr/local/bin/ices" -static char *tdesc = "Encode and Stream via icecast and ices"; - static char *app = "ICES"; static char *synopsis = "Encode and stream using 'ices'"; @@ -191,7 +189,7 @@ static int ices_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -202,24 +200,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, ices_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Encode and Stream via icecast and ices"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_image.c b/apps/app_image.c index 63c588e178..9e69bd4cd6 100644 --- a/apps/app_image.c +++ b/apps/app_image.c @@ -112,7 +112,7 @@ static int sendimage_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -123,24 +123,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, sendimage_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_ivrdemo.c b/apps/app_ivrdemo.c index 4147efe73a..1ceedf6a7d 100644 --- a/apps/app_ivrdemo.c +++ b/apps/app_ivrdemo.c @@ -110,7 +110,7 @@ static int skel_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -121,24 +121,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, skel_exec, tdesc, synopsis); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_lookupblacklist.c b/apps/app_lookupblacklist.c index 87db8f3bae..9db3d450b1 100644 --- a/apps/app_lookupblacklist.c +++ b/apps/app_lookupblacklist.c @@ -107,7 +107,7 @@ lookupblacklist_exec (struct ast_channel *chan, void *data) return 0; } -int unload_module (void) +static int unload_module(void *mod) { int res; @@ -118,24 +118,19 @@ int unload_module (void) return res; } -int load_module (void) +static int load_module(void *mod) { return ast_register_application (app, lookupblacklist_exec, synopsis,descrip); } -const char *description (void) +static const char *description(void) { return tdesc; } -int usecount (void) -{ - int res; - STANDARD_USECOUNT (res); - return res; -} - -const char *key () +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_lookupcidname.c b/apps/app_lookupcidname.c index f279b3b691..a4af9eb96a 100644 --- a/apps/app_lookupcidname.c +++ b/apps/app_lookupcidname.c @@ -80,8 +80,7 @@ lookupcidname_exec (struct ast_channel *chan, void *data) return 0; } -int -unload_module (void) +static int unload_module(void *mod) { int res; @@ -92,27 +91,19 @@ unload_module (void) return res; } -int -load_module (void) +static int load_module(void *mod) { - return ast_register_application (app, lookupcidname_exec, synopsis, - descrip); + return ast_register_application (app, lookupcidname_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return tdesc; } -int -usecount (void) +static const char *key(void) { - int res; - STANDARD_USECOUNT (res); - return res; + return ASTERISK_GPL_KEY; } -const char *key() -{ - return ASTERISK_GPL_KEY; -} +STD_MOD1; diff --git a/apps/app_macro.c b/apps/app_macro.c index 28674a9b66..fb3290fc12 100644 --- a/apps/app_macro.c +++ b/apps/app_macro.c @@ -343,7 +343,7 @@ static int macro_exit_exec(struct ast_channel *chan, void *data) return MACRO_EXIT_RESULT; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -356,7 +356,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -367,19 +367,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 0a1681a3d1..6ca35a241b 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -60,7 +60,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/translate.h" #include "asterisk/ulaw.h" -static const char *tdesc = "MeetMe conference bridge"; static const char *app = "MeetMe"; static const char *app2 = "MeetMeCount"; @@ -2425,7 +2424,7 @@ static void load_config(void) ast_config_destroy(cfg); } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -2440,7 +2439,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -2455,29 +2454,21 @@ int load_module(void) return res; } -int reload(void) +static int reload(void *mod) { load_config(); return 0; } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "MeetMe conference bridge"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/apps/app_milliwatt.c b/apps/app_milliwatt.c index f40b40161b..215fcb6bf6 100644 --- a/apps/app_milliwatt.c +++ b/apps/app_milliwatt.c @@ -43,8 +43,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/module.h" #include "asterisk/utils.h" -static char *tdesc = "Digital Milliwatt (mu-law) Test Application"; - static char *app = "Milliwatt"; static char *synopsis = "Generate a Constant 1000Hz tone at 0dbm (mu-law)"; @@ -140,7 +138,7 @@ static int milliwatt_exec(struct ast_channel *chan, void *data) return -1; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -151,24 +149,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, milliwatt_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Digital Milliwatt (mu-law) Test Application"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c index 43b5f7b951..d4e374a4b6 100644 --- a/apps/app_mixmonitor.c +++ b/apps/app_mixmonitor.c @@ -57,7 +57,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define get_volfactor(x) x ? ((x > 0) ? (1 << x) : ((1 << abs(x)) * -1)) : 0 -static const char *tdesc = "Mixed Audio Monitoring Application"; static const char *app = "MixMonitor"; static const char *synopsis = "Record a call and mix the audio during the recording"; static const char *desc = "" @@ -88,7 +87,7 @@ static const char *stop_desc = "" "on the current channel.\n" ""; -LOCAL_USER_DECL; +struct module_symbols *me; static const char *mixmonitor_spy_type = "MixMonitor"; @@ -169,7 +168,7 @@ static void *mixmonitor_thread(void *obj) struct ast_frame *f; char post_process[1024] = ""; - STANDARD_INCREMENT_USECOUNT; + ast_atomic_fetchadd_int(&__mod_desc->usecnt, +1); name = ast_strdupa(mixmonitor->chan->name); @@ -282,7 +281,7 @@ out2: out: free(mixmonitor); - STANDARD_DECREMENT_USECOUNT; + ast_atomic_fetchadd_int(&__mod_desc->usecnt, -1); return NULL; } @@ -461,7 +460,7 @@ static struct ast_cli_entry cli_mixmonitor = { complete_mixmonitor_cli }; -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -474,7 +473,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -485,21 +484,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Mixed Audio Monitoring Application"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_morsecode.c b/apps/app_morsecode.c index c21fd51fb0..81fe6a3215 100644 --- a/apps/app_morsecode.c +++ b/apps/app_morsecode.c @@ -162,7 +162,7 @@ static int morsecode_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -173,24 +173,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app_morsecode, morsecode_exec, morsecode_synopsis, morsecode_descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_mp3.c b/apps/app_mp3.c index 36131784bf..bfb0eb9ad9 100644 --- a/apps/app_mp3.c +++ b/apps/app_mp3.c @@ -226,7 +226,7 @@ static int mp3_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -237,24 +237,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, mp3_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_nbscat.c b/apps/app_nbscat.c index 36ad54db9b..a557f2dfae 100644 --- a/apps/app_nbscat.c +++ b/apps/app_nbscat.c @@ -207,7 +207,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -218,24 +218,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, NBScat_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c index 4be14f94af..bc12f5ba0d 100644 --- a/apps/app_osplookup.c +++ b/apps/app_osplookup.c @@ -596,7 +596,7 @@ static int ospfinished_exec(struct ast_channel *chan, void *data) return(res); } -int load_module(void) +static int load_module(void *mod) { int res; @@ -610,7 +610,7 @@ int load_module(void) return(res); } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -626,25 +626,14 @@ int unload_module(void) return(res); } -int reload(void) +static const char *description(void) { - return(0); + return "Open Settlement Protocol Applications"; } -const char *description(void) -{ - return("Open Settlement Protocol Applications"); -} - -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return(res); -} - -const char *key() +static const char *key(void) { return(ASTERISK_GPL_KEY); } +STD_MOD1; diff --git a/apps/app_page.c b/apps/app_page.c index 720c7abb7f..0dee1611f0 100644 --- a/apps/app_page.c +++ b/apps/app_page.c @@ -45,8 +45,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/chanvars.h" #include "asterisk/utils.h" -static const char *tdesc = "Page Multiple Phones"; - static const char *app_page= "Page"; static const char *page_synopsis = "Pages phones"; @@ -205,7 +203,7 @@ static int page_exec(struct ast_channel *chan, void *data) return -1; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -216,26 +214,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app_page, page_exec, page_synopsis, page_descrip); } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Page Multiple Phones"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_parkandannounce.c b/apps/app_parkandannounce.c index 1f73939302..26f661464b 100644 --- a/apps/app_parkandannounce.c +++ b/apps/app_parkandannounce.c @@ -255,9 +255,7 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) return res; } - - -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -268,25 +266,20 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { /* return ast_register_application(app, park_exec); */ return ast_register_application(app, parkandannounce_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_playback.c b/apps/app_playback.c index a9ce353eaf..fc5dcf20a9 100644 --- a/apps/app_playback.c +++ b/apps/app_playback.c @@ -135,7 +135,7 @@ static int playback_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -146,24 +146,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, playback_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_privacy.c b/apps/app_privacy.c index 6ce7d1fb8b..eb722e5a3a 100644 --- a/apps/app_privacy.c +++ b/apps/app_privacy.c @@ -210,8 +210,7 @@ static int privacy_exec (struct ast_channel *chan, void *data) return 0; } -int -unload_module (void) +static int unload_module(void *mod) { int res; @@ -222,27 +221,19 @@ unload_module (void) return res; } -int -load_module (void) +static int load_module(void *mod) { - return ast_register_application (app, privacy_exec, synopsis, - descrip); + return ast_register_application (app, privacy_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return tdesc; + return tdesc; } -int -usecount (void) +static const char *key(void) { - int res; - STANDARD_USECOUNT (res); - return res; + return ASTERISK_GPL_KEY; } -const char *key() -{ - return ASTERISK_GPL_KEY; -} +STD_MOD1; diff --git a/apps/app_queue.c b/apps/app_queue.c index 043d9797da..1642cf6f19 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -3852,7 +3852,7 @@ static struct ast_cli_entry cli_remove_queue_member = { { "remove", "queue", "member", NULL }, handle_remove_queue_member, "Removes a channel from a specified queue", rqm_cmd_usage, complete_remove_queue_member }; -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -3880,7 +3880,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -3912,26 +3912,21 @@ int load_module(void) return res; } - -int reload(void) +static int reload(void *mod) { reload_queues(); return 0; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); + diff --git a/apps/app_random.c b/apps/app_random.c index 9e42c7f286..c8a7f82874 100644 --- a/apps/app_random.c +++ b/apps/app_random.c @@ -95,7 +95,7 @@ static int random_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -106,24 +106,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app_random, random_exec, random_synopsis, random_descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_read.c b/apps/app_read.c index 94afc523d1..fa1c01c926 100644 --- a/apps/app_read.c +++ b/apps/app_read.c @@ -221,7 +221,7 @@ static int read_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -232,24 +232,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, read_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_readfile.c b/apps/app_readfile.c index 833ae9c7c3..f0c1215aed 100644 --- a/apps/app_readfile.c +++ b/apps/app_readfile.c @@ -107,7 +107,7 @@ static int readfile_exec(struct ast_channel *chan, void *data) } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -118,24 +118,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app_readfile, readfile_exec, readfile_synopsis, readfile_descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_realtime.c b/apps/app_realtime.c index 9cce38ca77..dacc6c3283 100644 --- a/apps/app_realtime.c +++ b/apps/app_realtime.c @@ -232,7 +232,7 @@ static int realtime_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -246,7 +246,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -258,20 +258,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/apps/app_record.c b/apps/app_record.c index 864714f561..38d6437e7e 100644 --- a/apps/app_record.c +++ b/apps/app_record.c @@ -29,8 +29,6 @@ #include <stdio.h> #include <string.h> -#define STATIC_MODULE - #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -46,7 +44,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/utils.h" #include "asterisk/options.h" -static char *tdesc = "Trivial Record Application"; static char *app = "Record"; @@ -343,7 +340,7 @@ static int record_exec(struct ast_channel *chan, void *data) return res; } -STATIC_MODULE int unload_module(void) +static int unload_module(void *mod) { int res; @@ -354,26 +351,19 @@ STATIC_MODULE int unload_module(void) return res; } -STATIC_MODULE int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, record_exec, synopsis, descrip); } -STATIC_MODULE const char *description(void) -{ - return tdesc; -} - -STATIC_MODULE int usecount(void) +static const char *description(void) { - int res; - STANDARD_USECOUNT(res); - return res; + return "Trivial Record Application"; } -STATIC_MODULE const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } -STD_MOD(MOD_1, NULL, NULL, NULL); +STD_MOD1; diff --git a/apps/app_rpt.c b/apps/app_rpt.c index d4e8177994..d919fc23ed 100644 --- a/apps/app_rpt.c +++ b/apps/app_rpt.c @@ -7023,7 +7023,7 @@ static int rpt_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int i; @@ -7041,7 +7041,7 @@ int unload_module(void) return i; } -int load_module(void) +static int load_module(void *mod) { ast_pthread_create(&rpt_master_thread,NULL,rpt_master,NULL); @@ -7052,20 +7052,14 @@ int load_module(void) return ast_register_application(app, rpt_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c index b70d074bc9..9b208ca2e2 100644 --- a/apps/app_sayunixtime.c +++ b/apps/app_sayunixtime.c @@ -107,7 +107,7 @@ static int sayunixtime_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -119,7 +119,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -129,19 +129,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c index 10c803a270..9ba21d2f3d 100644 --- a/apps/app_senddtmf.c +++ b/apps/app_senddtmf.c @@ -93,7 +93,7 @@ static int senddtmf_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -104,24 +104,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, senddtmf_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_sendtext.c b/apps/app_sendtext.c index e6bb80e794..87f0f0bec2 100644 --- a/apps/app_sendtext.c +++ b/apps/app_sendtext.c @@ -46,8 +46,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/options.h" #include "asterisk/app.h" -static const char *tdesc = "Send Text Applications"; - static const char *app = "SendText"; static const char *synopsis = "Send a Text Message"; @@ -118,7 +116,7 @@ static int sendtext_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -129,26 +127,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, sendtext_exec, synopsis, descrip); } -const char *description(void) -{ - return (char *) tdesc; -} - -int usecount(void) +static const char *description(void) { - int res; - - STANDARD_USECOUNT(res); - - return res; + return "Send Text Applications"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_setcallerid.c b/apps/app_setcallerid.c index d1c0c0aa4d..5d34859fcd 100644 --- a/apps/app_setcallerid.c +++ b/apps/app_setcallerid.c @@ -136,7 +136,7 @@ static int setcallerid_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -148,7 +148,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -158,19 +158,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_setcdruserfield.c b/apps/app_setcdruserfield.c index 80d56d2f3f..165f2c60c5 100644 --- a/apps/app_setcdruserfield.c +++ b/apps/app_setcdruserfield.c @@ -137,7 +137,7 @@ static int appendcdruserfield_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -150,7 +150,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -161,19 +161,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_settransfercapability.c b/apps/app_settransfercapability.c index 7b07ad0f69..2bf4e01f84 100644 --- a/apps/app_settransfercapability.c +++ b/apps/app_settransfercapability.c @@ -111,7 +111,7 @@ static int settransfercapability_exec(struct ast_channel *chan, void *data) } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -122,24 +122,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, settransfercapability_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return synopsis; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_skel.c b/apps/app_skel.c index 25a431182c..598170d2ef 100644 --- a/apps/app_skel.c +++ b/apps/app_skel.c @@ -43,7 +43,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/app.h" -static char *tdesc = "Trivial skeleton Application"; static char *app = "Skel"; static char *synopsis = "Skeleton application."; @@ -119,44 +118,26 @@ static int app_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; - res = ast_unregister_application(app); - - STANDARD_HANGUP_LOCALUSERS; - return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, app_exec, synopsis, descrip); } -int reload(void) -{ - /* This function will be called if a 'reload' is requested */ - - return 0; -} - -const char *description(void) +static const char *description(void) { - return tdesc; + return "Trivial skeleton Application"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_sms.c b/apps/app_sms.c index 373ca89066..c3488b9111 100644 --- a/apps/app_sms.c +++ b/apps/app_sms.c @@ -1511,7 +1511,7 @@ static int sms_exec (struct ast_channel *chan, void *data) return (h.err); } -int unload_module (void) +static int unload_module(void *mod) { int res; @@ -1522,7 +1522,7 @@ int unload_module (void) return res; } -int load_module (void) +static int load_module(void *mod) { #ifdef OUTALAW { @@ -1536,19 +1536,14 @@ int load_module (void) return ast_register_application (app, sms_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount (void) -{ - int res; - STANDARD_USECOUNT (res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_softhangup.c b/apps/app_softhangup.c index a651dce63e..a987f317a8 100644 --- a/apps/app_softhangup.c +++ b/apps/app_softhangup.c @@ -105,7 +105,7 @@ static int softhangup_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -116,24 +116,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, softhangup_exec, synopsis, desc); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_speech_utils.c b/apps/app_speech_utils.c index babf39b5d1..8cd6046e48 100644 --- a/apps/app_speech_utils.c +++ b/apps/app_speech_utils.c @@ -723,7 +723,7 @@ static int speech_destroy(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -746,7 +746,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -767,26 +767,14 @@ int load_module(void) return res; } -int reload(void) -{ - return 0; -} - -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_stack.c b/apps/app_stack.c index 87a7bf1777..1734f03117 100644 --- a/apps/app_stack.c +++ b/apps/app_stack.c @@ -44,7 +44,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define STACKVAR "~GOSUB~STACK~" -static const char *tdesc = "Stack Routines"; static const char *app_gosub = "Gosub"; static const char *app_gosubif = "GosubIf"; @@ -152,7 +151,7 @@ static int gosubif_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { ast_unregister_application(app_return); ast_unregister_application(app_pop); @@ -164,7 +163,7 @@ int unload_module(void) return 0; } -int load_module(void) +static int load_module(void *mod) { ast_register_application(app_pop, pop_exec, pop_synopsis, pop_descrip); ast_register_application(app_return, return_exec, return_synopsis, return_descrip); @@ -174,21 +173,14 @@ int load_module(void) return 0; } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Stack Routines"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_system.c b/apps/app_system.c index 12e46c828c..6a13f6b493 100644 --- a/apps/app_system.c +++ b/apps/app_system.c @@ -136,7 +136,7 @@ static int trysystem_exec(struct ast_channel *chan, void *data) return system_exec_helper(chan, data, 0); } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -148,7 +148,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -158,19 +158,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_talkdetect.c b/apps/app_talkdetect.c index 012893b477..dadde6a026 100644 --- a/apps/app_talkdetect.c +++ b/apps/app_talkdetect.c @@ -214,7 +214,7 @@ static int background_detect_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -225,24 +225,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, background_detect_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_test.c b/apps/app_test.c index 04e1d53777..db822b6c67 100644 --- a/apps/app_test.c +++ b/apps/app_test.c @@ -490,7 +490,7 @@ static int testserver_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -502,7 +502,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -512,19 +512,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_transfer.c b/apps/app_transfer.c index 67f67fe8a2..8bd0460973 100644 --- a/apps/app_transfer.c +++ b/apps/app_transfer.c @@ -47,8 +47,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") LOCAL_USER_DECL; -static const char *tdesc = "Transfer"; - static const char *app = "Transfer"; static const char *synopsis = "Transfer caller to remote extension"; @@ -144,7 +142,7 @@ static int transfer_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -155,26 +153,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, transfer_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Transfer"; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_url.c b/apps/app_url.c index eb59bf5130..7d34d9d9bc 100644 --- a/apps/app_url.c +++ b/apps/app_url.c @@ -161,7 +161,7 @@ out: return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -172,24 +172,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, sendurl_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_userevent.c b/apps/app_userevent.c index ddcec710e3..c476c71fea 100644 --- a/apps/app_userevent.c +++ b/apps/app_userevent.c @@ -99,7 +99,7 @@ static int userevent_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -110,24 +110,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, userevent_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_verbose.c b/apps/app_verbose.c index 4d2e8fcc2e..eb698f0b85 100644 --- a/apps/app_verbose.c +++ b/apps/app_verbose.c @@ -150,7 +150,7 @@ static int log_exec(struct ast_channel *chan, void *data) return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -162,7 +162,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -172,19 +172,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index ae061de3c6..d64c4963ee 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -6389,12 +6389,12 @@ static int load_config(void) } } -int reload(void) +static int reload(void *mod) { return(load_config()); } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -6411,7 +6411,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; res = ast_register_application(app, vm_exec, synopsis_vm, descrip_vm); @@ -6443,11 +6443,6 @@ int load_module(void) return res; } -const char *description(void) -{ - return tdesc; -} - static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num, char *outgoing_context) { int cmd = 0; @@ -6860,18 +6855,16 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re if (cmd == 't') cmd = 0; return cmd; - } +} - -int usecount(void) +static const char *description(void) { - int res; - STANDARD_USECOUNT(res); - return res; + return tdesc; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/apps/app_waitforring.c b/apps/app_waitforring.c index 35784502db..466061f7f0 100644 --- a/apps/app_waitforring.c +++ b/apps/app_waitforring.c @@ -120,7 +120,7 @@ static int waitforring_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -131,24 +131,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, waitforring_exec, synopsis, desc); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_waitforsilence.c b/apps/app_waitforsilence.c index f00516b293..17ffd8985e 100644 --- a/apps/app_waitforsilence.c +++ b/apps/app_waitforsilence.c @@ -175,7 +175,7 @@ static int waitforsilence_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -186,25 +186,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, waitforsilence_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/apps/app_while.c b/apps/app_while.c index b3b520fb3b..075a5276a8 100644 --- a/apps/app_while.c +++ b/apps/app_while.c @@ -325,7 +325,7 @@ static int while_end_exec(struct ast_channel *chan, void *data) { } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -338,7 +338,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -349,20 +349,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/apps/app_zapateller.c b/apps/app_zapateller.c index e5f49777a2..39c9f701b8 100644 --- a/apps/app_zapateller.c +++ b/apps/app_zapateller.c @@ -104,7 +104,7 @@ static int zapateller_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -115,24 +115,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, zapateller_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_zapbarge.c b/apps/app_zapbarge.c index d71095f5ba..ad77a6e4b7 100644 --- a/apps/app_zapbarge.c +++ b/apps/app_zapbarge.c @@ -302,7 +302,7 @@ out: return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -313,24 +313,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, conf_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_zapras.c b/apps/app_zapras.c index 3cf46a6314..d918b7d24a 100644 --- a/apps/app_zapras.c +++ b/apps/app_zapras.c @@ -240,7 +240,7 @@ static int zapras_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -251,24 +251,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, zapras_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/apps/app_zapscan.c b/apps/app_zapscan.c index 55a629422e..affa16d6a2 100644 --- a/apps/app_zapscan.c +++ b/apps/app_zapscan.c @@ -363,7 +363,7 @@ static int conf_exec(struct ast_channel *chan, void *data) return res; } -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -374,25 +374,19 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { return ast_register_application(app, conf_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/asterisk.c b/asterisk.c index ad3218aacc..642f1b5d83 100644 --- a/asterisk.c +++ b/asterisk.c @@ -101,7 +101,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/ulaw.h" #include "asterisk/alaw.h" #include "asterisk/callerid.h" -#include "asterisk/module.h" +// XXX #include "asterisk/module.h" #include "asterisk/image.h" #include "asterisk/tdd.h" #include "asterisk/term.h" diff --git a/cdr.c b/cdr.c index d9d5fb70c5..707a1a55a0 100644 --- a/cdr.c +++ b/cdr.c @@ -53,7 +53,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/sched.h" #include "asterisk/config.h" #include "asterisk/cli.h" -#include "asterisk/module.h" +// XXX #include "asterisk/module.h" #include "asterisk/stringfields.h" /*! Default AMA flag for billing records (CDR's) */ diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c index 3ce99ec12d..9150e5773b 100644 --- a/cdr/cdr_csv.c +++ b/cdr/cdr_csv.c @@ -311,12 +311,12 @@ static int csv_log(struct ast_cdr *cdr) return 0; } -const char *description(void) +static const char *description(void) { return desc; } -int unload_module(void) +static int unload_module(void *mod) { if (mf) fclose(mf); @@ -324,7 +324,7 @@ int unload_module(void) return 0; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -339,18 +339,15 @@ int load_module(void) return res; } -int reload(void) +static int reload(void *mod) { load_config(); return 0; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, reload, NULL, NULL); diff --git a/cdr/cdr_custom.c b/cdr/cdr_custom.c index 100db6c07f..6aad620d8a 100644 --- a/cdr/cdr_custom.c +++ b/cdr/cdr_custom.c @@ -137,12 +137,12 @@ static int custom_log(struct ast_cdr *cdr) return 0; } -const char *description(void) +static const char *description(void) { return desc; } -int unload_module(void) +static int unload_module(void *mod) { if (mf) fclose(mf); @@ -150,7 +150,7 @@ int unload_module(void) return 0; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -164,17 +164,15 @@ int load_module(void) return res; } -int reload(void) +static int reload(void *mod) { return load_config(1); } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, reload, NULL, NULL); + diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c index ed99a56906..c24130df79 100644 --- a/cdr/cdr_manager.c +++ b/cdr/cdr_manager.c @@ -135,18 +135,18 @@ static int manager_log(struct ast_cdr *cdr) return 0; } -const char *description(void) +static const char *description(void) { return desc; } -int unload_module(void) +static int unload_module(void *mod) { ast_cdr_unregister(name); return 0; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -161,18 +161,15 @@ int load_module(void) return res; } -int reload(void) +static int reload(void *mod) { loadconfigurationfile(); return 0; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, reload, NULL, NULL); diff --git a/channels/chan_agent.c b/channels/chan_agent.c index d5b565f55e..46cce1f874 100644 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -73,7 +73,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/monitor.h" #include "asterisk/stringfields.h" -static const char desc[] = "Agent Proxy Channel"; static const char tdesc[] = "Call Agent Proxy Channel"; static const char config[] = "agents.conf"; @@ -163,9 +162,6 @@ static int autologoffunavail = 0; static int maxlogintries = 3; static char agentgoodbye[AST_MAX_FILENAME_LEN] = "vm-goodbye"; -static int usecnt =0; -AST_MUTEX_DEFINE_STATIC(usecnt_lock); - static int recordagentcalls = 0; static char recordformat[AST_MAX_BUF] = ""; static char recordformatext[AST_MAX_BUF] = ""; @@ -727,9 +723,8 @@ static int agent_hangup(struct ast_channel *ast) * as in apps/app_chanisavail.c:chanavail_exec() */ - ast_mutex_lock(&usecnt_lock); - usecnt--; - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, -1); + /* XXX do we need ast_update_use_count(); */ ast_log(LOG_DEBUG, "Hangup called for state %s\n", ast_state2str(ast->_state)); if (p->start && (ast->_state != AST_STATE_UP)) { @@ -931,9 +926,7 @@ static struct ast_channel *agent_new(struct agent_pvt *p, int state) ast_setstate(tmp, state); tmp->tech_pvt = p; p->owner = tmp; - ast_mutex_lock(&usecnt_lock); - usecnt++; - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, +1); ast_update_use_count(); tmp->priority = 1; /* Wake up and wait for other applications (by definition the login app) @@ -1651,8 +1644,6 @@ static struct ast_cli_entry cli_agent_logoff = { { "agent", "logoff", NULL }, agent_logoff_cmd, "Sets an agent offline", agent_logoff_usage, complete_agent_logoff_cmd }; -LOCAL_USER_DECL; - /*! * \brief Log in agent application. * @@ -2484,8 +2475,9 @@ struct ast_custom_function agent_function = { * * @returns int Always 0. */ -int load_module() +static int load_module(void *mod) { + __mod_desc = mod; /* Make sure we can register our agent channel type */ if (ast_channel_register(&agent_tech)) { ast_log(LOG_ERROR, "Unable to register channel class 'Agent'\n"); @@ -2511,7 +2503,7 @@ int load_module() return 0; } -int reload() +static int reload(void *mod) { read_agent_config(); if (persistent_agents) @@ -2519,7 +2511,7 @@ int reload() return 0; } -int unload_module() +static int unload_module(void *mod) { struct agent_pvt *p; /* First, take us out of the channel loop */ @@ -2553,18 +2545,14 @@ int unload_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description() +static const char *description(void) { - return (char *) desc; + return "Agent Proxy Channel"; } +STD_MOD(MOD_0, reload, NULL, NULL); diff --git a/channels/chan_features.c b/channels/chan_features.c index 7dacc2e2c3..a1eb195ab4 100644 --- a/channels/chan_features.c +++ b/channels/chan_features.c @@ -63,7 +63,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/manager.h" #include "asterisk/stringfields.h" -static const char desc[] = "Feature Proxy Channel"; static const char tdesc[] = "Feature Proxy Channel Driver"; static int usecnt =0; @@ -535,7 +534,7 @@ static struct ast_cli_entry cli_show_features = { { "feature", "show", "channels", NULL }, features_show, "Show status of feature channels", show_features_usage, NULL }; -int load_module() +static int load_module(void *mod) { /* Make sure we can register our sip channel type */ if (ast_channel_register(&features_tech)) { @@ -546,12 +545,7 @@ int load_module() return 0; } -int reload() -{ - return 0; -} - -int unload_module() +static int unload_module(void *mod) { struct feature_pvt *p; @@ -574,18 +568,15 @@ int unload_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description() +static const char *description(void) { - return (char *) desc; + return "Feature Proxy Channel"; } +STD_MOD(MOD_1, NULL, NULL, NULL); + diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 56ae4c03eb..27270868e4 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -152,7 +152,6 @@ static int nochecksums = 0; static struct ast_codec_pref prefs; -static const char desc[] = "Inter Asterisk eXchange (Ver 2)"; static const char tdesc[] = "Inter Asterisk eXchange Driver (Ver 2)"; static char context[80] = "default"; @@ -9358,7 +9357,7 @@ static int iax2_reload(int fd, int argc, char *argv[]) return reload_config(); } -int reload(void) +static int reload(void *mod) { return reload_config(); } @@ -10054,7 +10053,7 @@ static int __unload_module(void) return 0; } -int unload_module() +static int unload_module(void *mod) { ast_mutex_destroy(&iaxq.lock); ast_mutex_destroy(&userl.lock); @@ -10066,7 +10065,7 @@ int unload_module() /*! \brief Load IAX2 module, load configuraiton ---*/ -int load_module(void) +static int load_module(void *mod) { char *config = "iax.conf"; int res = 0; @@ -10158,17 +10157,14 @@ int load_module(void) return res; } -const char *description() +static const char *description(void) { - return (char *) desc; + return "Inter Asterisk eXchange (Ver 2)"; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/channels/chan_local.c b/channels/chan_local.c index d994fb908e..5705dc905f 100644 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -61,12 +61,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/manager.h" #include "asterisk/stringfields.h" -static const char desc[] = "Local Proxy Channel"; static const char tdesc[] = "Local Proxy Channel Driver"; -static int usecnt =0; -AST_MUTEX_DEFINE_STATIC(usecnt_lock); - #define IS_OUTBOUND(a,b) (a == b->chan ? 1 : 0) static struct ast_channel *local_request(const char *type, int format, void *data, int *cause); @@ -395,9 +391,7 @@ static int local_hangup(struct ast_channel *ast) p->owner = NULL; ast->tech_pvt = NULL; - ast_mutex_lock(&usecnt_lock); - usecnt--; - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, -1); if (!p->owner && !p->chan) { /* Okay, done with the private part now, too. */ @@ -510,9 +504,7 @@ static struct ast_channel *local_new(struct local_pvt *p, int state) tmp2->tech_pvt = p; p->owner = tmp; p->chan = tmp2; - ast_mutex_lock(&usecnt_lock); - usecnt += 2; /* we allocate 2 new channels */ - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, +2); /* we allocate 2 new channels */ ast_update_use_count(); ast_copy_string(tmp->context, p->context, sizeof(tmp->context)); ast_copy_string(tmp2->context, p->context, sizeof(tmp2->context)); @@ -564,8 +556,10 @@ static struct ast_cli_entry cli_show_locals = { "Show status of local channels", show_locals_usage, NULL }; /*! \brief Load module into PBX, register channel */ -int load_module() +static int load_module(void *mod) { + __mod_desc = mod; + /* Make sure we can register our channel type */ if (ast_channel_register(&local_tech)) { ast_log(LOG_ERROR, "Unable to register channel class 'Local'\n"); @@ -575,14 +569,8 @@ int load_module() return 0; } -/*! \brief Reload module */ -int reload() -{ - return 0; -} - /*! \brief Unload the local proxy channel from Asterisk */ -int unload_module() +static int unload_module(void *mod) { struct local_pvt *p; @@ -604,18 +592,14 @@ int unload_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description() +static const char *description(void) { - return (char *) desc; + return "Local Proxy Channel"; } +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index 6fda77a48f..ffba65f700 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -137,7 +137,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define INADDR_NONE (in_addr_t)(-1) #endif -static const char desc[] = "Media Gateway Control Protocol (MGCP)"; static const char tdesc[] = "Media Gateway Control Protocol (MGCP)"; static const char config[] = "mgcp.conf"; @@ -242,8 +241,6 @@ static int amaflags = 0; static int adsi = 0; -static int usecnt =0; -AST_MUTEX_DEFINE_STATIC(usecnt_lock); /* SC: transaction id should always be positive */ static unsigned int oseq; @@ -1057,9 +1054,7 @@ static int mgcp_hangup(struct ast_channel *ast) } /* SC: Decrement use count */ - ast_mutex_lock(&usecnt_lock); - usecnt--; - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, -1); ast_update_use_count(); /* SC: Decrement use count */ @@ -1480,9 +1475,7 @@ static struct ast_channel *mgcp_new(struct mgcp_subchannel *sub, int state) if (i->amaflags) tmp->amaflags = i->amaflags; sub->owner = tmp; - ast_mutex_lock(&usecnt_lock); - usecnt++; - ast_mutex_unlock(&usecnt_lock); + ast_atomic_fetchadd_int(&__mod_desc->usecnt, +1); ast_update_use_count(); tmp->callgroup = i->callgroup; tmp->pickupgroup = i->pickupgroup; @@ -4323,10 +4316,11 @@ static int reload_config(void) } /*! \brief load_module: PBX load module - initialization ---*/ -int load_module() +static int load_module(void *mod) { int res; + __mod_desc = mod; sched = sched_context_create(); if (!sched) { ast_log(LOG_WARNING, "Unable to create schedule context\n"); @@ -4377,13 +4371,13 @@ static int mgcp_reload(int fd, int argc, char *argv[]) return 0; } -int reload(void) +static int reload(void *mod) { mgcp_reload(0, 0, NULL); return 0; } -int unload_module() +static int unload_module(void *mod) { struct mgcp_endpoint *e; struct mgcp_gateway *g; @@ -4455,17 +4449,14 @@ int unload_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description() +static const char *description(void) { - return (char *) desc; + return "Media Gateway Control Protocol (MGCP)"; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/channels/chan_oss.c b/channels/chan_oss.c index 140ed21bdf..8ee16dc33a 100644 --- a/channels/chan_oss.c +++ b/channels/chan_oss.c @@ -1462,7 +1462,7 @@ error: return NULL; } -int load_module(void) +static int load_module(void *mod) { int i; struct ast_config *cfg; @@ -1497,7 +1497,7 @@ int load_module(void) } -int unload_module() +static int unload_module(void *mod) { struct chan_oss_pvt *o; @@ -1521,17 +1521,14 @@ int unload_module() return 0; } -const char *description() +static const char *description(void) { return (char *)oss_tech.description; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/channels/chan_phone.c b/channels/chan_phone.c index b556aa8209..15c87dad1c 100644 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -1303,12 +1303,12 @@ static int __unload_module(void) return 0; } -int unload_module(void) +static int unload_module(void *mod) { return __unload_module(); } -int load_module() +static int load_module(void *mod) { struct ast_config *cfg; struct ast_variable *v; @@ -1415,17 +1415,14 @@ int load_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *description() +static const char *description(void) { return (char *) desc; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8bef7aa740..2f123918d5 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13675,7 +13675,7 @@ static int sip_reload(int fd, int argc, char *argv[]) } /*! \brief reload: Part of Asterisk module interface */ -int reload(void) +static int reload(void *mod) { return sip_reload(0, 0, NULL); } @@ -13711,7 +13711,7 @@ static struct ast_cli_entry my_clis[] = { }; /*! \brief load_module: PBX load module - initialization */ -int load_module() +static int load_module(void *mod) { ASTOBJ_CONTAINER_INIT(&userl); /* User object list */ ASTOBJ_CONTAINER_INIT(&peerl); /* Peer object list */ @@ -13766,7 +13766,7 @@ int load_module() return 0; } -int unload_module() +static int unload_module(void *mod) { struct sip_pvt *p, *pl; @@ -13852,19 +13852,14 @@ int unload_module() return 0; } -int usecount() -{ - return usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description() +static const char *description(void) { return (char *) desc; } - +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index e478648243..4112153971 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -3259,7 +3259,7 @@ static void delete_devices(void) ast_mutex_unlock(&devicelock); } -int reload(void) +static int reload(void *mod) { delete_devices(); reload_config(); @@ -3268,7 +3268,7 @@ int reload(void) } -int load_module() +static int load_module(void *mod) { int res = 0; @@ -3305,7 +3305,7 @@ int load_module() return res; } -int unload_module() +static int unload_module(void *mod) { #if 0 struct skinny_session *session, s; @@ -3360,17 +3360,14 @@ int unload_module() return -1; } -int usecount() -{ - return usecnt; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } -const char *description(void) +static const char *description(void) { return "Skinny Client Control Protocol (Skinny)"; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/channels/chan_zap.c b/channels/chan_zap.c index ce0bcd4616..c7341d29c8 100644 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -148,14 +148,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") /*! \brief Signaling types that need to use MF detection should be placed in this macro */ #define NEED_MFDETECT(p) (((p)->sig == SIG_FEATDMF) || ((p)->sig == SIG_FEATDMF_TA) || ((p)->sig == SIG_E911) || ((p)->sig == SIG_FGC_CAMA) || ((p)->sig == SIG_FGC_CAMAMF) || ((p)->sig == SIG_FEATB)) -static const char desc[] = "Zapata Telephony" -#ifdef ZAPATA_PRI - " w/PRI" -#endif -#ifdef ZAPATA_R2 - " w/R2" -#endif -; static const char tdesc[] = "Zapata Telephony Driver" #ifdef ZAPATA_PRI @@ -10367,7 +10359,7 @@ static int __unload_module(void) return 0; } -int unload_module() +static int unload_module(void *mod) { #ifdef ZAPATA_PRI int y; @@ -11225,7 +11217,7 @@ static int setup_zap(int reload) return 0; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -11374,7 +11366,7 @@ static int zt_sendtext(struct ast_channel *c, const char *text) } -int reload(void) +static int reload(void *mod) { int res = 0; @@ -11386,18 +11378,20 @@ int reload(void) return 0; } -int usecount() +static const char *description(void) { - return usecnt; -} - -const char *description() -{ - return (char *) desc; + return "Zapata Telephony" +#ifdef ZAPATA_PRI + " w/PRI" +#endif +#ifdef ZAPATA_R2 + " w/R2" +#endif + ; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } - +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/cli.c b/cli.c index 40d1cd59c2..c61f5a5c88 100644 --- a/cli.c +++ b/cli.c @@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/options.h" #include "asterisk/cli.h" #include "asterisk/linkedlists.h" +#define MOD_LOADER #include "asterisk/module.h" #include "asterisk/pbx.h" #include "asterisk/channel.h" diff --git a/codecs/codec_a_mu.c b/codecs/codec_a_mu.c index 2f5400de6c..51e38e9cf6 100644 --- a/codecs/codec_a_mu.c +++ b/codecs/codec_a_mu.c @@ -111,8 +111,6 @@ static struct ast_frame *ulawtoalaw_sample(void) return &f; } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator alawtoulaw = { .name = "alawtoulaw", .srcfmt = AST_FORMAT_ALAW, @@ -121,7 +119,6 @@ static struct ast_translator alawtoulaw = { .sample = alawtoulaw_sample, .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES, - .lockp = &me, }; static struct ast_translator ulawtoalaw = { @@ -132,24 +129,19 @@ static struct ast_translator ulawtoalaw = { .sample = ulawtoalaw_sample, .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES, - .lockp = &me, }; /*! \brief standard module glue */ -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&ulawtoalaw); res |= ast_unregister_translator(&alawtoulaw); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; int x; @@ -157,25 +149,22 @@ int load_module(void) mu2a[x] = AST_LIN2A(AST_MULAW(x)); a2mu[x] = AST_LIN2MU(AST_ALAW(x)); } - res = ast_register_translator(&alawtoulaw); + res = ast_register_translator(&alawtoulaw, mod); if (!res) - res = ast_register_translator(&ulawtoalaw); + res = ast_register_translator(&ulawtoalaw, mod); else ast_unregister_translator(&alawtoulaw); return res; } -const char *description(void) +static const char *description(void) { return "A-law and Mulaw direct Coder/Decoder"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/codecs/codec_adpcm.c b/codecs/codec_adpcm.c index 83ff54fba8..e9ee5b35de 100644 --- a/codecs/codec_adpcm.c +++ b/codecs/codec_adpcm.c @@ -27,6 +27,7 @@ * \ingroup codecs */ + #include <fcntl.h> #include <netinet/in.h> #include <stdio.h> @@ -326,8 +327,6 @@ static struct ast_frame *lintoadpcm_sample(void) return &f; } -struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator adpcmtolin = { .name = "adpcmtolin", .srcfmt = AST_FORMAT_ADPCM, @@ -338,7 +337,6 @@ static struct ast_translator adpcmtolin = { .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, .plc_samples = 160, - .lockp = &me, }; static struct ast_translator lintoadpcm = { @@ -351,7 +349,6 @@ static struct ast_translator lintoadpcm = { .desc_size = sizeof (struct adpcm_encoder_pvt), .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES/ 2, /* 2 samples per byte */ - .lockp = &me, }; static void parse_config(void) @@ -371,47 +368,40 @@ static void parse_config(void) } /*! \brief standard module glue */ -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintoadpcm); res |= ast_unregister_translator(&adpcmtolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res = ast_register_translator(&adpcmtolin); + res = ast_register_translator(&adpcmtolin, mod); if (!res) - res = ast_register_translator(&lintoadpcm); + res = ast_register_translator(&lintoadpcm, mod); else ast_unregister_translator(&adpcmtolin); return res; } -const char *description(void) +static const char *description(void) { return "Adaptive Differential PCM Coder/Decoder"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_alaw.c b/codecs/codec_alaw.c index 1178f1416d..d654e21e48 100644 --- a/codecs/codec_alaw.c +++ b/codecs/codec_alaw.c @@ -109,8 +109,6 @@ static struct ast_frame *lintoalaw_sample(void) return &f; } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator alawtolin = { .name = "alawtolin", .srcfmt = AST_FORMAT_ALAW, @@ -120,7 +118,6 @@ static struct ast_translator alawtolin = { .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, .plc_samples = 160, - .lockp = &me, }; static struct ast_translator lintoalaw = { @@ -131,7 +128,6 @@ static struct ast_translator lintoalaw = { .sample = lintoalaw_sample, .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES, - .lockp = &me, }; static void parse_config(void) @@ -152,47 +148,40 @@ static void parse_config(void) /*! \brief standard module stuff */ -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintoalaw); res |= ast_unregister_translator(&alawtolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res = ast_register_translator(&alawtolin); + res = ast_register_translator(&alawtolin, mod); if (!res) - res = ast_register_translator(&lintoalaw); + res = ast_register_translator(&lintoalaw, mod); else ast_unregister_translator(&alawtolin); return res; } -const char *description(void) +static const char *description(void) { return "A-law Coder/Decoder"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_g723_1.c b/codecs/codec_g723_1.c index d6e1d1b221..00a5ca635d 100644 --- a/codecs/codec_g723_1.c +++ b/codecs/codec_g723_1.c @@ -265,8 +265,6 @@ static struct ast_frame *lintog723_frameout(void *pvt) return ast_trans_frameout(pvt, cnt, samples); } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator g723tolin = { .name = #ifdef ANNEX_B @@ -280,7 +278,6 @@ static struct ast_translator g723tolin = { .framein = g723tolin_framein, .sample = g723tolin_sample, .desc_size = sizeof(struct ...), - .lockp = &me, }; static struct ast_translator lintog723 = { @@ -297,36 +294,31 @@ static struct ast_translator lintog723 = { .frameout = lintog723_frameout, .destroy = g723_destroy, .sample = lintog723_sample, - .lockp = &me, .desc_size = sizeof(struct ...), }; /*! \brief standard module glue */ -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintog723); res |= ast_unregister_translator(&g723tolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; - res=ast_register_translator(&g723tolin); + res=ast_register_translator(&g723tolin, mod); if (!res) - res=ast_register_translator(&lintog723); + res=ast_register_translator(&lintog723, mod); else ast_unregister_translator(&g723tolin); return res; } -const char *description(void) +static const char *description(void) { #ifdef ANNEX_B return "Annex B (floating point) G.723.1/PCM16 Codec Translator"; @@ -336,12 +328,9 @@ const char *description(void) } -int usecount(void) -{ - return me.usecnt; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_g726.c b/codecs/codec_g726.c index e3e766b476..3b979eb639 100644 --- a/codecs/codec_g726.c +++ b/codecs/codec_g726.c @@ -775,8 +775,6 @@ static struct ast_frame *lintog726_sample (void) return &f; } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator g726tolin = { .name = "g726tolin", .srcfmt = AST_FORMAT_G726, @@ -788,7 +786,6 @@ static struct ast_translator g726tolin = { .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, .plc_samples = 160, - .lockp = &me, }; static struct ast_translator lintog726 = { @@ -801,7 +798,6 @@ static struct ast_translator lintog726 = { .desc_size = sizeof(struct g726_coder_pvt), .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES/2, - .lockp = &me, }; static void parse_config(void) @@ -823,47 +819,39 @@ static void parse_config(void) /*! \brief standard module glue */ -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module (void) +static int unload_module (void *mod) { int res; - ast_mutex_lock (&me.lock); res = ast_unregister_translator (&lintog726); res |= ast_unregister_translator (&g726tolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock (&me.lock); return res; } -int load_module (void) +static int load_module (void *mod) { int res; parse_config(); - res = ast_register_translator (&g726tolin); + res = ast_register_translator (&g726tolin, mod); if (!res) - res = ast_register_translator (&lintog726); + res = ast_register_translator (&lintog726, mod); else ast_unregister_translator (&g726tolin); return res; } -const char *description(void) +static const char *description(void) { return "ITU G.726-32kbps G726 Transcoder"; } -int usecount (void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_gsm.c b/codecs/codec_gsm.c index df20d9b2ab..e9a85bc38d 100644 --- a/codecs/codec_gsm.c +++ b/codecs/codec_gsm.c @@ -203,8 +203,6 @@ static void gsm_destroy_stuff(struct ast_trans_pvt *pvt) gsm_destroy(tmp->gsm); } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator gsmtolin = { .name = "gsmtolin", .srcfmt = AST_FORMAT_GSM, @@ -213,7 +211,6 @@ static struct ast_translator gsmtolin = { .framein = gsmtolin_framein, .destroy = gsm_destroy_stuff, .sample = gsmtolin_sample, - .lockp = &me, .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, .desc_size = sizeof (struct gsm_translator_pvt ), @@ -229,7 +226,6 @@ static struct ast_translator lintogsm = { .frameout = lintogsm_frameout, .destroy = gsm_destroy_stuff, .sample = lintogsm_sample, - .lockp = &me, .desc_size = sizeof (struct gsm_translator_pvt ), .buf_size = (BUFFER_SAMPLES * GSM_FRAME_LEN + GSM_SAMPLES - 1)/GSM_SAMPLES, }; @@ -252,48 +248,41 @@ static void parse_config(void) } /*! \brief standard module glue */ -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintogsm); if (!res) res = ast_unregister_translator(&gsmtolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res=ast_register_translator(&gsmtolin); + res = ast_register_translator(&gsmtolin, mod); if (!res) - res=ast_register_translator(&lintogsm); + res=ast_register_translator(&lintogsm, mod); else ast_unregister_translator(&gsmtolin); return res; } -const char *description(void) +static const char *description(void) { return "GSM/PCM16 (signed linear) Codec Translator"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_ilbc.c b/codecs/codec_ilbc.c index 1c93394030..cc4f88307b 100644 --- a/codecs/codec_ilbc.c +++ b/codecs/codec_ilbc.c @@ -190,8 +190,6 @@ static struct ast_frame *lintoilbc_frameout(struct ast_trans_pvt *pvt) return ast_trans_frameout(pvt, datalen, samples); } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator ilbctolin = { .name = "ilbctolin", .srcfmt = AST_FORMAT_ILBC, @@ -201,7 +199,6 @@ static struct ast_translator ilbctolin = { .sample = ilbctolin_sample, .desc_size = sizeof(struct ilbc_coder_pvt), .buf_size = BUFFER_SAMPLES * 2, - .lockp = &me, }; static struct ast_translator lintoilbc = { @@ -214,43 +211,35 @@ static struct ast_translator lintoilbc = { .sample = lintoilbc_sample, .desc_size = sizeof(struct ilbc_coder_pvt), .buf_size = (BUFFER_SAMPLES * ILBC_FRAME_LEN + ILBC_SAMPLES - 1) / ILBC_SAMPLES, - .lockp = &me, }; -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintoilbc); res |= ast_unregister_translator(&ilbctolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); return res; } -int load_module(void) +static int load_module(void *mod) { int res; - res=ast_register_translator(&ilbctolin); + res = ast_register_translator(&ilbctolin, mod); if (!res) - res=ast_register_translator(&lintoilbc); + res=ast_register_translator(&lintoilbc, mod); else ast_unregister_translator(&ilbctolin); return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/codecs/codec_lpc10.c b/codecs/codec_lpc10.c index 192c94c874..1904368b94 100644 --- a/codecs/codec_lpc10.c +++ b/codecs/codec_lpc10.c @@ -240,8 +240,6 @@ static void lpc10_destroy(struct ast_trans_pvt *arg) free(pvt->lpc10.enc); } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator lpc10tolin = { .name = "lpc10tolin", .srcfmt = AST_FORMAT_LPC10, @@ -250,7 +248,6 @@ static struct ast_translator lpc10tolin = { .framein = lpc10tolin_framein, .destroy = lpc10_destroy, .sample = lpc10tolin_sample, - .lockp = &me, .desc_size = sizeof(struct lpc10_coder_pvt), .buffer_samples = BUFFER_SAMPLES, .plc_samples = LPC10_SAMPLES_PER_FRAME, @@ -266,7 +263,6 @@ static struct ast_translator lintolpc10 = { .frameout = lintolpc10_frameout, .destroy = lpc10_destroy, .sample = lintolpc10_sample, - .lockp = &me, .desc_size = sizeof(struct lpc10_coder_pvt), .buffer_samples = BUFFER_SAMPLES, .buf_size = LPC10_BYTES_IN_COMPRESSED_FRAME * (1 + BUFFER_SAMPLES / LPC10_SAMPLES_PER_FRAME), @@ -289,49 +285,41 @@ static void parse_config(void) ast_config_destroy(cfg); } -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintolpc10); - if (!res) - res = ast_unregister_translator(&lpc10tolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); + res |= ast_unregister_translator(&lpc10tolin); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res=ast_register_translator(&lpc10tolin); + res=ast_register_translator(&lpc10tolin, mod); if (!res) - res=ast_register_translator(&lintolpc10); + res=ast_register_translator(&lintolpc10, mod); else ast_unregister_translator(&lpc10tolin); return res; } -const char *description(void) +static const char *description(void) { return "LPC10 2.4kbps (signed linear) Voice Coder"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_speex.c b/codecs/codec_speex.c index 86d20b52b4..2f31fb4d59 100644 --- a/codecs/codec_speex.c +++ b/codecs/codec_speex.c @@ -337,8 +337,6 @@ static void lintospeex_destroy(struct ast_trans_pvt *arg) speex_bits_destroy(&pvt->bits); } -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator speextolin = { .name = "speextolin", .srcfmt = AST_FORMAT_SPEEX, @@ -350,7 +348,6 @@ static struct ast_translator speextolin = { .desc_size = sizeof(struct speex_coder_pvt), .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, - .lockp = &me, }; static struct ast_translator lintospeex = { @@ -365,10 +362,8 @@ static struct ast_translator lintospeex = { .desc_size = sizeof(struct speex_coder_pvt), .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, /* XXX maybe a lot less ? */ - .lockp = &me, }; - static void parse_config(void) { struct ast_config *cfg = ast_config_load("codecs.conf"); @@ -479,7 +474,7 @@ static void parse_config(void) ast_config_destroy(cfg); } -int reload(void) +static int reload(void *mod) { /* * XXX reloading while there are active sessions is @@ -487,48 +482,40 @@ int reload(void) * wouldn't work anymore... * maybe we shuld do a standard hangup localusers ? */ - ast_mutex_lock(&me.lock); + ast_mutex_lock(&__mod_desc->lock); parse_config(); - ast_mutex_lock(&me.lock); + ast_mutex_lock(&__mod_desc->lock); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintospeex); - if (!res) - res = ast_unregister_translator(&speextolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); + res |= ast_unregister_translator(&speextolin); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res=ast_register_translator(&speextolin); + res=ast_register_translator(&speextolin, mod); if (!res) - res=ast_register_translator(&lintospeex); + res=ast_register_translator(&lintospeex, mod); else ast_unregister_translator(&speextolin); return res; } -const char *description(void) +static const char *description(void) { return "Speex/PCM16 (signed linear) Codec Translator"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/codecs/codec_ulaw.c b/codecs/codec_ulaw.c index d1fba82477..0db01de7ca 100644 --- a/codecs/codec_ulaw.c +++ b/codecs/codec_ulaw.c @@ -118,15 +118,12 @@ static struct ast_frame *lintoulaw_sample(void) * \brief The complete translator for ulawToLin. */ -static struct ast_module_lock me = { .usecnt = -1 }; - static struct ast_translator ulawtolin = { .name = "ulawtolin", .srcfmt = AST_FORMAT_ULAW, .dstfmt = AST_FORMAT_SLINEAR, .framein = ulawtolin_framein, .sample = ulawtolin_sample, - .lockp = &me, .buffer_samples = BUFFER_SAMPLES, .buf_size = BUFFER_SAMPLES * 2, .plc_samples = 160, @@ -142,7 +139,6 @@ static struct ast_translator lintoulaw = { .dstfmt = AST_FORMAT_ULAW, .framein = lintoulaw_framein, .sample = lintoulaw_sample, - .lockp = &me, .buf_size = BUFFER_SAMPLES, .buffer_samples = BUFFER_SAMPLES, }; @@ -163,32 +159,27 @@ static void parse_config(void) ast_config_destroy(cfg); } -int reload(void) +static int reload(void *mod) { parse_config(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { int res; - ast_mutex_lock(&me.lock); res = ast_unregister_translator(&lintoulaw); - if (!res) - res = ast_unregister_translator(&ulawtolin); - if (me.usecnt) - res = -1; - ast_mutex_unlock(&me.lock); + res |= ast_unregister_translator(&ulawtolin); return res; } -int load_module(void) +static int load_module(void *mod) { int res; parse_config(); - res = ast_register_translator(&ulawtolin); + res = ast_register_translator(&ulawtolin, mod); if (!res) - res = ast_register_translator(&lintoulaw); + res = ast_register_translator(&lintoulaw, mod); else ast_unregister_translator(&ulawtolin); return res; @@ -198,17 +189,14 @@ int load_module(void) * Return a description of this module. */ -const char *description(void) +static const char *description(void) { return "Mu-law Coder/Decoder"; } -int usecount(void) -{ - return me.usecnt; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, reload, NULL, NULL); diff --git a/file.c b/file.c index b55c9546e8..aba90813b1 100644 --- a/file.c +++ b/file.c @@ -51,6 +51,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/app.h" #include "asterisk/pbx.h" #include "asterisk/linkedlists.h" +#define MOD_LOADER #include "asterisk/module.h" /* ast_update_use_count() */ /* @@ -69,8 +70,8 @@ int ast_format_register(const struct ast_format *f) { struct ast_format *tmp; - if (f->lockp == NULL) { - ast_log(LOG_WARNING, "Missing lock pointer, you need to supply one\n"); + if (f->module == NULL) { + ast_log(LOG_WARNING, "Missing module pointer, you need to supply one\n"); return -1; } if (AST_LIST_LOCK(&formats)) { @@ -101,10 +102,6 @@ int ast_format_register(const struct ast_format *f) } memset(&tmp->list, 0, sizeof(tmp->list)); - if (tmp->lockp->usecnt < 0) { - ast_mutex_init(&tmp->lockp->lock); - tmp->lockp->usecnt = 0; - } AST_LIST_INSERT_HEAD(&formats, tmp, list); AST_LIST_UNLOCK(&formats); @@ -319,12 +316,7 @@ static int fn_wrapper(struct ast_filestream *s, const char *comment, enum wrap_f ast_log(LOG_WARNING, "Unable to rewrite format %s\n", f->name); else { /* preliminary checks succeed. update usecount */ - if (ast_mutex_lock(&f->lockp->lock)) { - ast_log(LOG_WARNING, "Unable to lock format %s\n", f->name); - return -1; - } - f->lockp->usecnt++; - ast_mutex_unlock(&f->lockp->lock); + ast_atomic_fetchadd_int(&f->module->usecnt, +1); ret = 0; ast_update_use_count(); } @@ -749,13 +741,8 @@ int ast_closestream(struct ast_filestream *f) fclose(f->f); if (f->vfs) ast_closestream(f->vfs); - if (ast_mutex_lock(&f->fmt->lockp->lock)) { - ast_log(LOG_WARNING, "Unable to lock format %s\n", f->fmt->name); - } else { - f->fmt->lockp->usecnt--; - ast_mutex_unlock(&f->fmt->lockp->lock); - ast_update_use_count(); - } + ast_atomic_fetchadd_int(&f->fmt->module->usecnt, -1); + ast_update_use_count(); free(f); return 0; } diff --git a/formats/format_g723.c b/formats/format_g723.c index 4beba0c648..5de56d86cc 100644 --- a/formats/format_g723.c +++ b/formats/format_g723.c @@ -138,8 +138,6 @@ static off_t g723_tell(struct ast_filestream *fs) return -1; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format g723_1_f = { .name = "g723sf", .exts = "g723|g723sf", @@ -150,30 +148,27 @@ static const struct ast_format g723_1_f = { .tell = g723_tell, .read = g723_read, .buf_size = G723_MAX_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&g723_1_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(g723_1_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "G.723.1 Simple Timestamp File Format"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_g726.c b/formats/format_g726.c index d72f489919..61b06b47e2 100644 --- a/formats/format_g726.c +++ b/formats/format_g726.c @@ -190,8 +190,6 @@ static off_t g726_tell(struct ast_filestream *fs) return -1; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format f[] = { { .name = "g726-40", @@ -206,7 +204,7 @@ static const struct ast_format f[] = { .read = g726_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct g726_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }, { .name = "g726-32", @@ -221,7 +219,7 @@ static const struct ast_format f[] = { .read = g726_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct g726_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }, { .name = "g726-24", @@ -236,7 +234,7 @@ static const struct ast_format f[] = { .read = g726_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct g726_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }, { .name = "g726-16", @@ -251,7 +249,7 @@ static const struct ast_format f[] = { .read = g726_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct g726_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }, { .format = 0 } /* terminator */ }; @@ -259,7 +257,7 @@ static const struct ast_format f[] = { /* * Module interface (load_module, unload_module, usecount, description, key) */ -int load_module() +static int load_module(void *mod) { int i; @@ -272,7 +270,7 @@ int load_module() return 0; } -int unload_module() +static int unload_module(void *mod) { int i; @@ -283,18 +281,14 @@ int unload_module() return(0); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw G.726 (16/24/32/40kbps) data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/formats/format_g729.c b/formats/format_g729.c index 1719e3a5c8..387641e7ab 100644 --- a/formats/format_g729.c +++ b/formats/format_g729.c @@ -134,8 +134,6 @@ static off_t g729_tell(struct ast_filestream *fs) return (offset/BUF_SIZE)*G729A_SAMPLES; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format g729_f = { .name = "g729", .exts = "g729", @@ -146,30 +144,27 @@ static const struct ast_format g729_f = { .tell = g729_tell, .read = g729_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&g729_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(g729_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw G729 data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_gsm.c b/formats/format_gsm.c index 423088c178..46d9433942 100644 --- a/formats/format_gsm.c +++ b/formats/format_gsm.c @@ -156,8 +156,6 @@ static off_t gsm_tell(struct ast_filestream *fs) return (offset/GSM_FRAME_SIZE)*GSM_SAMPLES; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format gsm_f = { .name = "gsm", .exts = "gsm", @@ -168,30 +166,27 @@ static const struct ast_format gsm_f = { .tell = gsm_tell, .read = gsm_read, .buf_size = 2*GSM_FRAME_SIZE + AST_FRIENDLY_OFFSET, /* 2 gsm frames */ - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&gsm_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(gsm_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw GSM data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_h263.c b/formats/format_h263.c index c64e001fde..602943dbc5 100644 --- a/formats/format_h263.c +++ b/formats/format_h263.c @@ -163,8 +163,6 @@ static off_t h263_tell(struct ast_filestream *fs) return offset; /* XXX totally bogus, needs fixing */ } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format h263_f = { .name = "h263", .exts = "h264", @@ -177,30 +175,27 @@ static const struct ast_format h263_f = { .read = h263_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct h263_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&h263_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(h263_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw h263 data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_h264.c b/formats/format_h264.c index 26db782e5a..5c4ddf8f0f 100644 --- a/formats/format_h264.c +++ b/formats/format_h264.c @@ -156,8 +156,6 @@ static off_t h264_tell(struct ast_filestream *fs) return offset; /* XXX totally bogus, needs fixing */ } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format h264_f = { .name = "h264", .exts = "h264", @@ -170,30 +168,27 @@ static const struct ast_format h264_f = { .read = h264_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct h264_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&h264_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(h264_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw h264 data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_ilbc.c b/formats/format_ilbc.c index 940abf25f5..154dc17abd 100644 --- a/formats/format_ilbc.c +++ b/formats/format_ilbc.c @@ -132,8 +132,6 @@ static off_t ilbc_tell(struct ast_filestream *fs) return (offset/ILBC_BUF_SIZE)*ILBC_SAMPLES; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format ilbc_f = { .name = "iLBC", .exts = "ilbc", @@ -144,31 +142,27 @@ static const struct ast_format ilbc_f = { .tell = ilbc_tell, .read = ilbc_read, .buf_size = ILBC_BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&ilbc_f); } - -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(ilbc_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw iLBC data"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_jpeg.c b/formats/format_jpeg.c index 01f4d929a8..a66b21fbcb 100644 --- a/formats/format_jpeg.c +++ b/formats/format_jpeg.c @@ -115,30 +115,25 @@ static struct ast_imager jpeg_format = { jpeg_write_image, }; -int load_module() +static int load_module(void *mod) { return ast_image_register(&jpeg_format); } -int unload_module() +static int unload_module(void *mod) { ast_image_unregister(&jpeg_format); return 0; } -int usecount() -{ - /* We never really have any users */ - return 0; -} - -const char *description() +static const char *description(void) { return desc; } - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/formats/format_ogg_vorbis.c b/formats/format_ogg_vorbis.c index ee12e6a8fc..69a43f0fd0 100644 --- a/formats/format_ogg_vorbis.c +++ b/formats/format_ogg_vorbis.c @@ -523,8 +523,6 @@ static off_t ogg_vorbis_tell(struct ast_filestream *s) return -1; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format vorbis_f = { .name = "ogg_vorbis", .exts = "ogg", @@ -539,31 +537,27 @@ static const struct ast_format vorbis_f = { .close = ogg_vorbis_close, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct vorbis_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&vorbis_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(vorbis_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "OGG/Vorbis audio"; } - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_pcm.c b/formats/format_pcm.c index 889e7afc2e..c2b626240e 100644 --- a/formats/format_pcm.c +++ b/formats/format_pcm.c @@ -414,8 +414,6 @@ static off_t au_tell(struct ast_filestream *fs) return offset - AU_HEADER_SIZE; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format alaw_f = { .name = "alaw", .exts = "alaw|al", @@ -426,7 +424,7 @@ static const struct ast_format alaw_f = { .tell = pcm_tell, .read = pcm_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ #ifdef REALTIME_WRITE .open = pcma_open, .rewrite = pcma_rewrite, @@ -444,7 +442,7 @@ static const struct ast_format pcm_f = { .tell = pcm_tell, .read = pcm_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; static const struct ast_format au_f = { @@ -459,10 +457,10 @@ static const struct ast_format au_f = { .tell = au_tell, .read = pcm_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, /* this many shorts */ - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { int index; @@ -476,23 +474,20 @@ int load_module() || ast_format_register(&au_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(pcm_f.name) || ast_format_unregister(alaw_f.name) || ast_format_unregister(au_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw/Sun uLaw/ALaw 8khz Audio support (PCM,PCMA,AU)"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_sln.c b/formats/format_sln.c index 3e4d2e0c9a..4a78aa9008 100644 --- a/formats/format_sln.c +++ b/formats/format_sln.c @@ -116,8 +116,6 @@ static off_t slinear_tell(struct ast_filestream *fs) return ftello(fs->f) / 2; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format slin_f = { .name = "sln", .exts = "sln|raw", @@ -128,30 +126,27 @@ static const struct ast_format slin_f = { .tell = slinear_tell, .read = slinear_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&slin_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(slin_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Raw Signed Linear Audio support (SLN)"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_vox.c b/formats/format_vox.c index b1f7e688a2..8e52201436 100644 --- a/formats/format_vox.c +++ b/formats/format_vox.c @@ -121,8 +121,6 @@ static off_t vox_tell(struct ast_filestream *fs) return offset; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format vox_f = { .name = "vox", .exts = "vox", @@ -133,30 +131,27 @@ static const struct ast_format vox_f = { .tell = vox_tell, .read = vox_read, .buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&vox_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(vox_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Dialogic VOX (ADPCM) File Format"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_wav.c b/formats/format_wav.c index eb3b2d5ad5..cc610ef53d 100644 --- a/formats/format_wav.c +++ b/formats/format_wav.c @@ -498,8 +498,6 @@ static off_t wav_tell(struct ast_filestream *fs) return (offset - 44)/2; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format wav_f = { .name = "wav", .exts = "wav", @@ -514,30 +512,27 @@ static const struct ast_format wav_f = { .close = wav_close, .buf_size = WAV_BUF_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct wav_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&wav_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(wav_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Microsoft WAV format (8000hz Signed Linear)"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c index dedc8f9d9f..d3abbd2f04 100644 --- a/formats/format_wav_gsm.c +++ b/formats/format_wav_gsm.c @@ -541,8 +541,6 @@ static off_t wav_tell(struct ast_filestream *fs) return (offset - MSGSM_DATA_OFFSET)/MSGSM_FRAME_SIZE*MSGSM_SAMPLES; } -static struct ast_format_lock me = { .usecnt = -1 }; - static const struct ast_format wav49_f = { .name = "wav49", .exts = "WAV|wav49", @@ -557,30 +555,27 @@ static const struct ast_format wav49_f = { .close = wav_close, .buf_size = 2*GSM_FRAME_SIZE + AST_FRIENDLY_OFFSET, .desc_size = sizeof(struct wavg_desc), - .lockp = &me, + .module = &mod_data, /* XXX */ }; -int load_module() +static int load_module(void *mod) { return ast_format_register(&wav49_f); } -int unload_module() +static int unload_module(void *mod) { return ast_format_unregister(wav49_f.name); } -int usecount() -{ - return me.usecnt; -} - -const char *description() +static const char *description(void) { return "Microsoft WAV format (Proprietary GSM)"; } -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD1; diff --git a/funcs/func_base64.c b/funcs/func_base64.c index 872416e961..3353078faa 100644 --- a/funcs/func_base64.c +++ b/funcs/func_base64.c @@ -78,31 +78,27 @@ static struct ast_custom_function base64_decode_function = { .read = base64_decode, }; -static char *tdesc = "base64 encode/decode dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&base64_encode_function) | ast_custom_function_unregister(&base64_decode_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&base64_encode_function) | ast_custom_function_register(&base64_decode_function); } -const char *description(void) +static const char *description(void) { - return tdesc; + return "base64 encode/decode dialplan functions"; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_callerid.c b/funcs/func_callerid.c index b277df1c52..e87ed11a7e 100644 --- a/funcs/func_callerid.c +++ b/funcs/func_callerid.c @@ -143,27 +143,24 @@ static struct ast_custom_function callerid_function = { static char *tdesc = "Caller ID related dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&callerid_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&callerid_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_cdr.c b/funcs/func_cdr.c index 20373ec8d9..26fb045bde 100644 --- a/funcs/func_cdr.c +++ b/funcs/func_cdr.c @@ -124,27 +124,24 @@ static struct ast_custom_function cdr_function = { static char *tdesc = "CDR dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&cdr_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&cdr_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_channel.c b/funcs/func_channel.c index 8d60f4ccde..16aebb4c25 100644 --- a/funcs/func_channel.c +++ b/funcs/func_channel.c @@ -138,27 +138,24 @@ static struct ast_custom_function channel_function = { static char *tdesc = "Channel information dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&channel_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&channel_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_curl.c b/funcs/func_curl.c index 0260b9bbec..7d55f9b083 100644 --- a/funcs/func_curl.c +++ b/funcs/func_curl.c @@ -155,7 +155,7 @@ struct ast_custom_function acf_curl = { .read = acf_curl_exec, }; -int unload_module(void) +static int unload_module(void *mod) { int res; @@ -166,7 +166,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -175,19 +175,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_cut.c b/funcs/func_cut.c index 434a2f9408..69f4ac1230 100644 --- a/funcs/func_cut.c +++ b/funcs/func_cut.c @@ -303,7 +303,7 @@ struct ast_custom_function acf_cut = { .read = acf_cut_exec, }; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -315,7 +315,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -325,19 +325,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/funcs/func_db.c b/funcs/func_db.c index 492389e585..f7439302bf 100644 --- a/funcs/func_db.c +++ b/funcs/func_db.c @@ -161,7 +161,7 @@ static struct ast_custom_function db_exists_function = { static char *tdesc = "Database (astdb) related dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -171,7 +171,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -181,17 +181,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_enum.c b/funcs/func_enum.c index 542eb04e1d..2a409ffee7 100644 --- a/funcs/func_enum.c +++ b/funcs/func_enum.c @@ -173,7 +173,7 @@ static struct ast_custom_function txtcidname_function = { static char *tdesc = "ENUM related dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -185,7 +185,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -195,21 +195,15 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/funcs/func_env.c b/funcs/func_env.c index 4d8564803d..d899277756 100644 --- a/funcs/func_env.c +++ b/funcs/func_env.c @@ -138,7 +138,7 @@ static struct ast_custom_function stat_function = { static char *tdesc = "Environment/filesystem dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -148,7 +148,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -158,17 +158,15 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_groupcount.c b/funcs/func_groupcount.c index 88bf0572aa..d3bf627a57 100644 --- a/funcs/func_groupcount.c +++ b/funcs/func_groupcount.c @@ -197,7 +197,7 @@ static struct ast_custom_function group_list_function = { static char *tdesc = "Channel group dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -209,7 +209,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -221,17 +221,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_language.c b/funcs/func_language.c index 2680388620..a3a47d5ef2 100644 --- a/funcs/func_language.c +++ b/funcs/func_language.c @@ -78,27 +78,24 @@ static struct ast_custom_function language_function = { static char *tdesc = "Channel language dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&language_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&language_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_logic.c b/funcs/func_logic.c index 9f3e78cd9f..aebcb4c17c 100644 --- a/funcs/func_logic.c +++ b/funcs/func_logic.c @@ -176,7 +176,7 @@ static struct ast_custom_function if_time_function = { static char *tdesc = "Logical dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -189,7 +189,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -202,17 +202,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_math.c b/funcs/func_math.c index 0928a2da43..3ad32fdac1 100644 --- a/funcs/func_math.c +++ b/funcs/func_math.c @@ -249,27 +249,25 @@ static struct ast_custom_function math_function = { static char *tdesc = "Mathematical dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&math_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&math_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); + diff --git a/funcs/func_md5.c b/funcs/func_md5.c index 5455694d8a..e05e0141df 100644 --- a/funcs/func_md5.c +++ b/funcs/func_md5.c @@ -106,29 +106,26 @@ static struct ast_custom_function checkmd5_function = { static char *tdesc = "MD5 digest dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&md5_function) | ast_custom_function_unregister(&checkmd5_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&md5_function) | ast_custom_function_register(&checkmd5_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_moh.c b/funcs/func_moh.c index 029b715dfb..61c19bb4ae 100644 --- a/funcs/func_moh.c +++ b/funcs/func_moh.c @@ -74,27 +74,24 @@ static struct ast_custom_function moh_function = { static char *tdesc = "Music-on-hold dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&moh_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&moh_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c index c76937fb42..56332e9705 100644 --- a/funcs/func_odbc.c +++ b/funcs/func_odbc.c @@ -646,32 +646,25 @@ reload_out: return res; } -int unload_module(void) +static int unload_module(void *mod) { return odbc_unload_module(); } -int load_module(void) +static int load_module(void *mod) { return odbc_load_module(); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - if (! ast_mutex_trylock(&query_lock)) { - ast_mutex_unlock(&query_lock); - return 0; - } else { - return 1; - } -} +/* XXX need to revise usecount - set if query_lock is set */ -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1, NULL, NULL, NULL); diff --git a/funcs/func_rand.c b/funcs/func_rand.c index 053bcf524b..2c0818b3d6 100644 --- a/funcs/func_rand.c +++ b/funcs/func_rand.c @@ -94,29 +94,27 @@ static struct ast_custom_function acf_rand = { static char *tdesc = "Random number dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { ast_custom_function_unregister(&acf_rand); return 0; } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&acf_rand); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_sha1.c b/funcs/func_sha1.c index d2b5ad8827..8a9fabfd08 100644 --- a/funcs/func_sha1.c +++ b/funcs/func_sha1.c @@ -71,27 +71,24 @@ static struct ast_custom_function sha1_function = { static char *tdesc = "SHA-1 computation dialplan function"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&sha1_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&sha1_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_strings.c b/funcs/func_strings.c index 5da638ce04..7445b64a57 100644 --- a/funcs/func_strings.c +++ b/funcs/func_strings.c @@ -424,7 +424,7 @@ static struct ast_custom_function keypadhash_function = { static char *tdesc = "String handling dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { int res = 0; @@ -442,7 +442,7 @@ int unload_module(void) return res; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -460,17 +460,15 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_timeout.c b/funcs/func_timeout.c index 75b328e805..e1133865ee 100644 --- a/funcs/func_timeout.c +++ b/funcs/func_timeout.c @@ -175,27 +175,24 @@ static struct ast_custom_function timeout_function = { static char *tdesc = "Channel timeout dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&timeout_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&timeout_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/funcs/func_uri.c b/funcs/func_uri.c index e39ee60015..dbef5608df 100644 --- a/funcs/func_uri.c +++ b/funcs/func_uri.c @@ -88,29 +88,25 @@ static struct ast_custom_function urlencode_function = { static char *tdesc = "URI encode/decode dialplan functions"; -int unload_module(void) +static int unload_module(void *mod) { return ast_custom_function_unregister(&urldecode_function) || ast_custom_function_unregister(&urlencode_function); } -int load_module(void) +static int load_module(void *mod) { return ast_custom_function_register(&urldecode_function) || ast_custom_function_register(&urlencode_function); } -const char *description(void) +static const char *description(void) { return tdesc; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_1 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/include/asterisk.h b/include/asterisk.h index 7e63f608ca..8e86832113 100644 --- a/include/asterisk.h +++ b/include/asterisk.h @@ -73,17 +73,33 @@ int dnsmgr_init(void); void dnsmgr_start_refresh(void); int dnsmgr_reload(void); +/*! + * \brief Reload asterisk modules. + * \param name the name of the module to reload + * + * This function reloads the specified module, or if no modules are specified, + * it will reload all loaded modules. + * + * \note Modules are reloaded using their reload() functions, not unloading + * them and loading them again. + * + * \return Zero if the specified module was not found, 1 if the module was + * found but cannot be reloaded, -1 if a reload operation is already in + * progress, and 2 if the specfied module was found and reloaded. + */ +int ast_module_reload(const char *name); + /*! * \brief Register a function to be executed before Asterisk exits. * \param func The callback function to use. - * + * * \return Zero on success, -1 on error. */ int ast_register_atexit(void (*func)(void)); - -/*! + +/*! * \brief Unregister a function registered with ast_register_atexit(). - * \param func The callback function to unregister. + * \param func The callback function to unregister. */ void ast_unregister_atexit(void (*func)(void)); diff --git a/include/asterisk/file.h b/include/asterisk/file.h index 905ea0a0d0..f8ac14b04b 100644 --- a/include/asterisk/file.h +++ b/include/asterisk/file.h @@ -106,7 +106,7 @@ struct ast_format { int buf_size; /*! size of frame buffer, if any, aligned to 8 bytes. */ int desc_size; /*! size of private descriptor, if any */ - struct ast_format_lock *lockp; + struct module_symbols *module; }; /* diff --git a/include/asterisk/module.h b/include/asterisk/module.h index dfee1b1a32..1b1e434a61 100644 --- a/include/asterisk/module.h +++ b/include/asterisk/module.h @@ -26,7 +26,11 @@ #ifndef _ASTERISK_MODULE_H #define _ASTERISK_MODULE_H -#include "asterisk/linkedlists.h" /* XXX needed here */ +#ifdef STATIC_MODULE +#error STATIC_MODULE should not be defined +#endif +#define STATIC_MODULE --- this is an error +#define LOCAL_USER_DECL /* --- this is an error --- */ #include "asterisk/utils.h" @@ -34,83 +38,6 @@ extern "C" { #endif -#ifdef STATIC_MODULE /* symbols are static */ -#define _HAVE_STATIC_MODULE -#undef STATIC_MODULE -#define STATIC_MODULE static /* symbols are static */ -#else /* !STATIC_MODULE, symbols are global */ -#define STATIC_MODULE /* empty - symbols are global */ - -/*! \note Every module should provide these functions */ -/*! - * \brief Initialize the module. - * - * This function is called at module load time. Put all code in here - * that needs to set up your module's hardware, software, registrations, - * etc. - * - * \return This function should return 0 on success and non-zero on failure. - * If the module is not loaded successfully, Asterisk will call its - * unload_module() function. - */ -int load_module(void); - -/*! - * \brief Cleanup all module structures, sockets, etc. - * - * This is called at exit. Any registrations and memory allocations need to be - * unregistered and free'd here. Nothing else will do these for you (until - * exit). - * - * \return Zero on success, or non-zero on error. - */ -int unload_module(void); - -/*! - * \brief Provides a usecount. - * - * This function will be called by various parts of asterisk. Basically, all - * it has to do is to return a usecount when called. You will need to maintain - * your usecount within the module somewhere. The usecount should be how many - * channels provided by this module are in use. - * - * \return The module's usecount. - */ -int usecount(void); /* How many channels provided by this module are in use? */ - -/*! \brief Provides a description of the module. - * - * \return a short description of your module - */ -const char *description(void); /* Description of this module */ - -/*! - * \brief Returns the ASTERISK_GPL_KEY - * - * This returns the ASTERISK_GPL_KEY, signifiying that you agree to the terms of - * the GPL stated in the ASTERISK_GPL_KEY. Your module will not load if it does - * not return the EXACT message: - * - * \code - * char *key(void) { - * return ASTERISK_GPL_KEY; - * } - * \endcode - * - * \return ASTERISK_GPL_KEY - */ -const char *key(void); /* Return the below mentioned key, unmodified */ - -/*! - * \brief Reload stuff. - * - * This function is where any reload routines take place. Re-read config files, - * change signalling, whatever is appropriate on a reload. - * - * \return The return value is not used. - */ -int reload(void); /* reload configs */ -#endif /* !STATIC_MODULE case */ /*! \brief The text the key() function should return. */ #define ASTERISK_GPL_KEY \ @@ -128,32 +55,12 @@ express written permission of Digium, Inc. is prohibited.\n" #define AST_MODULE_CONFIG "modules.conf" /*!< \brief Module configuration file */ -/*! - * \brief Softly unload a module. - * - * This flag signals ast_unload_resource() to unload a module only if it is not - * in use, according to the module's usecount. - */ -#define AST_FORCE_SOFT 0 - -/*! - * \brief Firmly unload a module. - * - * This flag signals ast_unload_resource() to attempt to unload a module even - * if it is in use. It will attempt to use the module's unload_module - * function. - */ -#define AST_FORCE_FIRM 1 - -/*! - * \brief Unconditionally unload a module. - * - * This flag signals ast_unload_resource() to first attempt to unload a module - * using the module's unload_module function, then if that fails to unload the - * module using dlclose. The module will be unloaded even if it is still in - * use. Use of this flag is not recommended. - */ -#define AST_FORCE_HARD 2 +enum unload_mode { + AST_FORCE_SOFT = 0, /*! Softly unload a module, only if not in use */ + AST_FORCE_FIRM = 1, /*! Firmly unload a module, even if in use */ + AST_FORCE_HARD = 2, /*! as FIRM, plus dlclose() on the module. Not recommended + as it may cause crashes */ +}; /*! * \brief Load a module. @@ -180,7 +87,7 @@ int ast_load_resource(const char *resource_name); * * \return Zero on success, -1 on error. */ -int ast_unload_resource(const char *resource_name, int force); +int ast_unload_resource(const char *resource_name, enum unload_mode); /*! * \brief Notify when usecount has been changed. @@ -226,22 +133,6 @@ int ast_loader_register(int (*updater)(void)); */ int ast_loader_unregister(int (*updater)(void)); -/*! - * \brief Reload asterisk modules. - * \param name the name of the module to reload - * - * This function reloads the specified module, or if no modules are specified, - * it will reload all loaded modules. - * - * \note Modules are reloaded using their reload() functions, not unloading - * them and loading them again. - * - * \return Zero if the specified module was not found, 1 if the module was - * found but cannot be reloaded, -1 if a reload operation is already in - * progress, and 2 if the specfied module was found and reloaded. - */ -int ast_module_reload(const char *name); - /*! * \brief Match modules names for the Asterisk cli. * \param line Unused by this function, but this should be the line we are @@ -265,114 +156,19 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state, they're in use at the time they have been requested to be removed */ struct localuser { + struct localuser *next; struct ast_channel *chan; - AST_LIST_ENTRY(localuser) next; -}; - -/*! \brief structure used for lock and refcount of module users. - * \note The mutex protects the usecnt field and whatever needs to be - * protected (typically, a list of struct localuser). - * As a trick, if usecnt is initialized with -1, - * ast_format_register will init the mutex for you. - */ -struct ast_module_lock { - ast_mutex_t lock; - AST_LIST_HEAD_NOLOCK(localuser_head, localuser) u; - int usecnt; /* number of active clients */ }; -struct localuser *ast_localuser_add(struct ast_module_lock *m, struct ast_channel *chan); -void ast_localuser_remove(struct ast_module_lock *m, struct localuser *u); -void ast_hangup_localusers(struct ast_module_lock *m); - -/*! - * \brief create a localuser mutex and several other variables used for keeping the - * use count. - * - * <b>Sample Usage:</b> - * \code - * LOCAL_USER_DECL; - * \endcode - */ -#define LOCAL_USER_DECL \ - static struct ast_module_lock me = { \ - .u = AST_LIST_HEAD_NOLOCK_INIT_VALUE, \ - .usecnt = 0, \ - .lock = AST_MUTEX_INIT_VALUE } - -#define STANDARD_USECOUNT_DECL LOCAL_USER_DECL /* XXX lock remains unused */ - -/*! \brief run 'x' protected by lock, then call ast_update_use_count() */ -#define __MOD_PROTECT(x) do { \ - ast_mutex_lock(&me.lock); \ - x; \ - ast_mutex_unlock(&me.lock); \ - ast_update_use_count(); \ - } while (0) - -#define STANDARD_INCREMENT_USECOUNT __MOD_PROTECT(me.usecnt++) -#define STANDARD_DECREMENT_USECOUNT __MOD_PROTECT(me.usecnt--) - -/*! - * \brief Add a localuser. - * \param u a pointer to a localuser struct - * - * This macro adds a localuser to the list of users and increments the - * usecount. It expects a variable named \p chan of type \p ast_channel in the - * current scope. - * - * \note This function dynamically allocates memory. If this operation fails - * it will cause your function to return -1 to the caller. - */ -#define LOCAL_USER_ADD(u) do { \ - u = ast_localuser_add(&me, chan); \ - if (!u) \ - return -1; \ - } while (0) - -/*! - * \brief Remove a localuser. - * \param u the user to add, should be of type struct localuser - * - * This macro removes a localuser from the list of users and decrements the - * usecount. - */ -#define LOCAL_USER_REMOVE(u) ast_localuser_remove(&me, u) - -/*! - * \brief Hangup all localusers. - * - * This macro hangs up on all current localusers and sets the usecount to zero - * when finished. - */ -#define STANDARD_HANGUP_LOCALUSERS ast_hangup_localusers(&me) +struct module_symbols; /* forward declaration */ +struct localuser *ast_localuser_add(struct module_symbols *, struct ast_channel *); +void ast_localuser_remove(struct module_symbols *, struct localuser *); +void ast_hangup_localusers(struct module_symbols *); -/*! - * \brief Set the specfied integer to the current usecount. - * \param res the integer variable to set. - * - * This macro sets the specfied integer variable to the local usecount. - * - * <b>Sample Usage:</b> - * \code - * int usecount(void) - * { - * int res; - * STANDARD_USECOUNT(res); - * return res; - * } - * \endcode - */ -#define STANDARD_USECOUNT(res) do { res = me.usecnt; } while (0) - -/*! \brief Old usecount macro - * \note XXX The following macro is deprecated, and only used by modules - * in codecs/ and a few other places which do their own manipulation - * of the usecount variable. - * Its use is supposed to be gradually phased away as those modules - * are updated to use the standard mechanism. - */ -#define OLD_STANDARD_USECOUNT(res) do { res = localusecnt; } while (0) +/* XXX deprecated macros, only for backward compatibility */ +#define LOCAL_USER_ADD(u) do { u = ast_localuser_add(__mod_desc, chan); } while (0) +#define LOCAL_USER_REMOVE(u) ast_localuser_remove(__mod_desc, u) +#define STANDARD_HANGUP_LOCALUSERS ast_hangup_localusers(__mod_desc) /*! \page ModMngmnt The Asterisk Module management interface * \par The following is part of the new module management code. @@ -388,7 +184,7 @@ void ast_hangup_localusers(struct ast_module_lock *m); * * Functions should be added with MOD_FUNC(name), * data structures with MOD_DATA(_name). - * The array in turn is referenced by struct module_symbol. + * The array in turn is referenced by struct module_symbols. * (Typically, a module will export only a single symbol, which points * to a record containing all the methods. This is the API of the module, * and should be known to the module's clients as well. @@ -403,7 +199,7 @@ void ast_hangup_localusers(struct ast_module_lock *m); * to figure out if there is a mismatch (not terribly useful because most * objects are a single word, but still... ) * The symbol can be added to the array with MOD_WANT(symbol) macro. - * required_symbols is also pointed by through struct module_symbol. + * required_symbols is also pointed by through struct module_symbols. * * Typically, the whole interface exported by a module should be * in a single structure named after the module, as follows. @@ -501,25 +297,50 @@ struct ast_registry { }; struct module_symbols { - int (*load_module)(void); - int (*unload_module)(void); - int (*usecount)(void); - const char *(*description)(void); - const char *(*key)(void); - int (*reload)(void); - enum module_type { - MOD_0, /* old module style */ - MOD_1, /* old style, but symbols here */ - MOD_2, /* new style, exported symbols */ - } type; - struct ast_registry *reg; + /* load, reload and unload receive as argument a pointer to a module descriptor + * to be stored locally and used for local calls and so on. + * They all return 0 on success, non zero (-1) on failure. + */ + + int (*load_module)(void *); /* register stuff etc. Optional. */ + + int (*reload)(void *); /* reload config etc. Optional. */ + + int (*unload_module)(void *); /* unload. called with the module locked */ + + const char *(*description)(void); /* textual id of the module. */ + + /*! + * This returns the ASTERISK_GPL_KEY, signifiying that you agree to the terms of + * the GPL stated in the ASTERISK_GPL_KEY. Your module will not load if it does + * not return the EXACT message: + */ + const char *(*key)(void); /*! the asterisk key */ + + enum module_flags { + MOD_0 = 0x0, /* old module style */ + MOD_1 = 0x1, /* old style, but symbols here */ + MOD_2 = 0x2, /* new style, exported symbols */ + MOD_MASK = 0xf, /* mask for module types */ + NO_USECOUNT = 0x10, /* do not track usecount */ + NO_UNLOAD = 0x20, /* only forced unload allowed */ + DO_LOCALUSERS = 0x40, /* track localusers */ + } flags; + /* the following two fields should go in the astobj. */ + ast_mutex_t lock; + int usecnt; /* number of active clients */ + + /* list of clients */ + struct localuser *lu_head; + struct ast_registry *reg; /* list of things to register. */ struct symbol_entry *exported_symbols; struct symbol_entry *required_symbols; }; -#ifndef _HAVE_STATIC_MODULE -#define STD_MOD(t, reload_fn, exp, req) -#else +#ifndef MOD_LOADER /* the loader does not use these */ +struct module_symbols mod_data; /* forward declaration */ +static struct module_symbols *__mod_desc __attribute__ ((__unused__)) = &mod_data; /* used by localuser */ + #define STD_MOD(t, reload_fn, exp, req) \ struct module_symbols mod_data = { \ .load_module = load_module, \ @@ -527,12 +348,13 @@ struct module_symbols mod_data = { \ .description = description, \ .key = key, \ .reload = reload_fn, \ - .usecount = usecount, \ - .type = t, \ + .flags = t, \ .exported_symbols = exp, \ .required_symbols = req \ }; -#endif /* _HAVE_STATIC_MODULE */ + +#define STD_MOD1 STD_MOD(MOD_1, NULL, NULL, NULL) +#endif #if defined(__cplusplus) || defined(c_plusplus) } diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h index 8f1a867599..a83cfa41ee 100644 --- a/include/asterisk/translate.h +++ b/include/asterisk/translate.h @@ -33,7 +33,7 @@ extern "C" { #include "asterisk/frame.h" #include "asterisk/plc.h" #include "asterisk/linkedlists.h" -#include "asterisk/module.h" +// XXX #include "asterisk/module.h" #endif struct ast_trans_pvt; /* declared below */ @@ -98,7 +98,7 @@ struct ast_translator { int plc_samples; /* set to the plc block size if used, 0 otherwise */ int useplc; /* current status of plc, changed at runtime */ - struct ast_module_lock *lockp; + void *module; /* opaque reference to the parent module */ int cost; /*! Cost in milliseconds for encoding/decoding 1 second of sound */ AST_LIST_ENTRY(ast_translator) list; /*! link field */ @@ -147,7 +147,7 @@ struct ast_trans_pvt; * This registers a codec translator with asterisk * Returns 0 on success, -1 on failure */ -int ast_register_translator(struct ast_translator *t); +int ast_register_translator(struct ast_translator *t, void *module); /*! * \brief Unregister a translator diff --git a/loader.c b/loader.c index b423084b7b..d6a0496cc3 100644 --- a/loader.c +++ b/loader.c @@ -30,6 +30,7 @@ #include <stdlib.h> #include <string.h> +#define MOD_LOADER /* prevent some module-specific stuff from being compiled */ #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -94,7 +95,7 @@ enum st_t { /* possible states of a module */ */ struct module { AST_LIST_ENTRY(module) next; - struct module_symbols cb; + struct module_symbols *cb; void *lib; /* the shared lib */ char resource[256]; @@ -118,43 +119,53 @@ AST_MUTEX_DEFINE_STATIC(reloadlock); * the extra function call will be totally negligible in all cases. */ -struct localuser *ast_localuser_add(struct ast_module_lock *m, +struct localuser *ast_localuser_add(struct module_symbols *me, struct ast_channel *chan) { struct localuser *u = ast_calloc(1, sizeof(*u)); if (u == NULL) return NULL; u->chan = chan; - ast_mutex_lock(&m->lock); - AST_LIST_INSERT_HEAD(&m->u, u, next); - m->usecnt++; - ast_mutex_unlock(&m->lock); + ast_mutex_lock(&me->lock); + u->next = me->lu_head; + me->lu_head = u; + ast_mutex_unlock(&me->lock); + ast_atomic_fetchadd_int(&me->usecnt, +1); ast_update_use_count(); return u; } -void ast_localuser_remove(struct ast_module_lock *m, struct localuser *u) +void ast_localuser_remove(struct module_symbols *me, struct localuser *u) { - ast_mutex_lock(&m->lock); - AST_LIST_REMOVE(&m->u, u, next); - m->usecnt--; + struct localuser *x, *prev = NULL; + ast_mutex_lock(&me->lock); + /* unlink from the list */ + for (x = me->lu_head; x; prev = x, x = x->next) { + if (x == u) { + if (prev) + prev->next = x->next; + else + me->lu_head = x->next; + break; + } + } + ast_mutex_unlock(&me->lock); + ast_atomic_fetchadd_int(&me->usecnt, -1); free(u); - ast_mutex_unlock(&m->lock); ast_update_use_count(); } -void ast_hangup_localusers(struct ast_module_lock *m) +void ast_hangup_localusers(struct module_symbols *me) { - struct localuser *u; - ast_mutex_lock(&m->lock); - AST_LIST_TRAVERSE_SAFE_BEGIN(&m->u, u, next) { + struct localuser *u, *next; + ast_mutex_lock(&me->lock); + for (u = me->lu_head; u; u = next) { + next = u->next; ast_softhangup(u->chan, AST_SOFTHANGUP_APPUNLOAD); + ast_atomic_fetchadd_int(&me->usecnt, -1); free(u); - AST_LIST_REMOVE_CURRENT(&m->u, next); } - AST_LIST_TRAVERSE_SAFE_END - m->usecnt = 0; - ast_mutex_unlock(&m->lock); + ast_mutex_unlock(&me->lock); ast_update_use_count(); } @@ -169,8 +180,7 @@ void ast_hangup_localusers(struct ast_module_lock *m) * RTLD_GLOBAL to make symbols visible to other modules, and * to avoid load failures due to cross dependencies. * - * MOD_1 almost as above, but the generic callbacks are all into a - * a structure, mod_data. Same load requirements as above. + * MOD_1 The generic callbacks are all into a structure, mod_data. * * MOD_2 this is the 'new style' format for modules. The module must * explictly declare which simbols are exported and which @@ -221,7 +231,7 @@ static void *module_symbol_helper(const char *name, struct symbol_entry *es; if (delta > 0 && m->state == MS_FAILED) continue; /* cannot 'get' a symbol from a failed module */ - for (es = m->cb.exported_symbols; ret == NULL && es && es->name; es++) { + for (es = m->cb->exported_symbols; ret == NULL && es && es->name; es++) { if (!strcmp(es->name, name)) { ret = es->value; m->export_refcount += delta; @@ -256,7 +266,7 @@ static void release_module(struct module *m) { struct symbol_entry *s; - for (s = m->cb.required_symbols; s && s->name != NULL; s++) { + for (s = m->cb->required_symbols; s && s->name != NULL; s++) { if (s->value != NULL) { release_module_symbol(s->name); s->value = NULL; @@ -268,7 +278,7 @@ static void release_module(struct module *m) /*! \brief check that no NULL symbols are exported - the algorithms rely on that. */ static int check_exported(struct module *m) { - struct symbol_entry *es = m->cb.exported_symbols; + struct symbol_entry *es = m->cb->exported_symbols; int errors = 0; if (es == NULL) @@ -311,7 +321,7 @@ static int resolve(struct module *m) * resolve and verify symbols, and downgrade as appropriate. */ m->state = MS_CANLOAD; - for (s = m->cb.required_symbols; s && s->name != NULL; s++) { + for (s = m->cb->required_symbols; s && s->name != NULL; s++) { void **p = (void **)(s->value); if (*p == NULL) /* symbol not resolved yet */ @@ -369,11 +379,11 @@ static int fixup(const char *caller) new++; /* print some debugging info for new modules */ if (m->state == MS_NEW && - (m->cb.exported_symbols || m->cb.required_symbols)) + (m->cb->exported_symbols || m->cb->required_symbols)) ast_log(LOG_NOTICE, "module %-30s exports %p requires %p state %s(%d)\n", - m->resource, m->cb.exported_symbols, - m->cb.required_symbols, + m->resource, m->cb->exported_symbols, + m->cb->required_symbols, st_name(m->state), m->state); } ast_log(LOG_DEBUG, "---- fixup (%s): %d modules, %d new ---\n", @@ -388,7 +398,7 @@ static int fixup(const char *caller) if (m->state != MS_CANLOAD) /* for now, done with this module */ continue; /* try to run the load routine */ - if (m->cb.load_module()) { /* error */ + if (m->cb->load_module(m)) { /* error */ ast_log(LOG_WARNING, "load_module %s fail\n", m->resource); release_module(m); /* and set to MS_FAIL */ @@ -498,7 +508,7 @@ static int verify_key(const unsigned char *key) return -1; } -int ast_unload_resource(const char *resource_name, int force) +int ast_unload_resource(const char *resource_name, enum unload_mode force) { struct module *cur; int res = -1; @@ -506,11 +516,11 @@ int ast_unload_resource(const char *resource_name, int force) if (AST_LIST_LOCK(&module_list)) /* XXX should fail here ? */ ast_log(LOG_WARNING, "Failed to lock\n"); AST_LIST_TRAVERSE_SAFE_BEGIN(&module_list, cur, next) { - struct module_symbols *m = &cur->cb; + struct module_symbols *m = cur->cb; if (strcasecmp(cur->resource, resource_name)) /* not us */ continue; - if ((res = m->usecount()) > 0) { + if (m->usecnt > 0 || m->flags & NO_UNLOAD) { if (force) ast_log(LOG_WARNING, "Warning: Forcing removal of module %s with use count %d\n", resource_name, res); else { @@ -519,7 +529,8 @@ int ast_unload_resource(const char *resource_name, int force) break; } } - res = m->unload_module(); + ast_hangup_localusers(m); + res = m->unload_module(m); if (res) { ast_log(LOG_WARNING, "Firm unload failed for %s\n", resource_name); if (force <= AST_FORCE_FIRM) { @@ -553,7 +564,7 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state, return NULL; AST_LIST_LOCK(&module_list); AST_LIST_TRAVERSE(&module_list, cur, next) { - if (!strncasecmp(word, cur->resource, l) && (cur->cb.reload || !needsreload) && + if (!strncasecmp(word, cur->resource, l) && (cur->cb->reload || !needsreload) && ++which > state) { ret = strdup(cur->resource); break; @@ -574,7 +585,6 @@ int ast_module_reload(const char *name) struct module *cur; int res = 0; /* return value. 0 = not found, others, see below */ int i, oldversion; - int (*reload)(void); if (ast_mutex_trylock(&reloadlock)) { ast_verbose("The previous reload command didn't finish yet\n"); @@ -592,11 +602,10 @@ int ast_module_reload(const char *name) AST_LIST_LOCK(&module_list); oldversion = modlistver; AST_LIST_TRAVERSE(&module_list, cur, next) { - struct module_symbols *m = &cur->cb; + struct module_symbols *m = cur->cb; if (name && strcasecmp(name, cur->resource)) /* not ours */ continue; - reload = m->reload; - if (!reload) { /* cannot be reloaded */ + if (!m->reload) { /* cannot be reloaded */ if (res < 1) /* store result if possible */ res = 1; /* 1 = no reload() method */ continue; @@ -606,7 +615,7 @@ int ast_module_reload(const char *name) res = 2; if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Reloading module '%s' (%s)\n", cur->resource, m->description()); - reload(); + m->reload(m); AST_LIST_LOCK(&module_list); if (oldversion != modlistver) /* something changed, abort */ break; @@ -659,7 +668,7 @@ static struct module * __load_resource(const char *resource_name, int errors=0; int res; struct module *cur; - struct module_symbols *m, *m1; + struct module_symbols *m = NULL; int flags = RTLD_NOW; unsigned char *key; char tmp[80]; @@ -687,7 +696,6 @@ static struct module * __load_resource(const char *resource_name, AST_LIST_UNLOCK(&module_list); return NULL; } - m = &cur->cb; ast_copy_string(cur->resource, resource_name, sizeof(cur->resource)); if (resource_name[0] == '/') ast_copy_string(fn, resource_name, sizeof(fn)); @@ -697,11 +705,13 @@ static struct module * __load_resource(const char *resource_name, /* open in a sane way */ cur->lib = dlopen(fn, RTLD_NOW | RTLD_LOCAL); if (cur->lib) { - if ((m1 = find_symbol(cur, "mod_data", 0)) == NULL || m1->type == MOD_0) { + if ((m = find_symbol(cur, "mod_data", 0)) == NULL || + (m->flags & MOD_MASK) == MOD_0) { /* old-style module, close and reload with standard flags */ dlclose(cur->lib); cur->lib = NULL; } + m = NULL; } if (cur->lib == NULL) /* try reopen with the old style */ cur->lib = dlopen(fn, flags); @@ -712,26 +722,21 @@ static struct module * __load_resource(const char *resource_name, AST_LIST_UNLOCK(&module_list); return NULL; } - m1 = find_symbol(cur, "mod_data", 0); - if (m1 != NULL) { /* new style module */ - ast_log(LOG_WARNING, "new style %s (%d) loaded RTLD_LOCAL\n", - resource_name, m1->type); + if (m == NULL) /* MOD_0 modules may still have a mod_data entry */ + m = find_symbol(cur, "mod_data", 0); + if (m != NULL) { /* new style module */ + ast_log(LOG_WARNING, "new style %s (0x%x) loaded RTLD_LOCAL\n", + resource_name, m->flags); + cur->cb = m; /* use the mod_data from the module itself */ errors = check_exported(cur); - *m = *m1; } else { - m->type = MOD_0; - m->load_module = find_symbol(cur, "load_module", 1); - m->unload_module = find_symbol(cur, "unload_module", 1); - m->usecount = find_symbol(cur, "usecount", 1); - m->description = find_symbol(cur, "description", 1); - m->key = find_symbol(cur, "key", 1); - m->reload = find_symbol(cur, "reload", 0); + ast_log(LOG_WARNING, "misstng mod_data for %s\n", + resource_name); + errors++; } if (!m->load_module) errors++; - if (!m->unload_module) - errors++; - if (!m->usecount) + if (!m->unload_module && !(m->flags & NO_UNLOAD) ) errors++; if (!m->description) errors++; @@ -753,6 +758,10 @@ static struct module * __load_resource(const char *resource_name, AST_LIST_UNLOCK(&module_list); return NULL; } + /* init mutex and usecount */ + ast_mutex_init(&cur->cb->lock); + cur->cb->lu_head = NULL; + if (!ast_fully_booted) { if (option_verbose) ast_verbose( " => (%s)\n", term_color(tmp, m->description(), COLOR_BROWN, COLOR_BLACK, sizeof(tmp))); @@ -768,7 +777,7 @@ static struct module * __load_resource(const char *resource_name, so reload commands will be issued in same order modules were loaded */ modlistver++; - if (m->type == MOD_2) { + if ( (m->flags & MOD_MASK) == MOD_2) { ast_log(LOG_WARNING, "new-style module %s, deferring load()\n", resource_name); cur->state = MS_NEW; @@ -777,7 +786,7 @@ static struct module * __load_resource(const char *resource_name, /* XXX make sure the usecount is 1 before releasing the lock */ AST_LIST_UNLOCK(&module_list); - if (cur->state == MS_CANLOAD && (res = m->load_module())) { + if (cur->state == MS_CANLOAD && (res = m->load_module(m))) { ast_log(LOG_WARNING, "%s: load_module failed, returning %d\n", resource_name, res); ast_unload_resource(resource_name, 0); return NULL; @@ -808,22 +817,22 @@ int ast_load_resource(const char *resource_name) } #if 0 -+/* -+ * load a single module (API call). -+ * (recursive calls from load_module() succeed. -+ */ -+int ast_load_resource(const char *resource_name) -+{ -+ struct module *m; -+ int ret; -+ -+ ast_mutex_lock(&modlock); -+ m = __load_resource(resource_name, 0); -+ fixup(resource_name); -+ ret = (m->state == MS_FAILED) ? -1 : 0; -+ ast_mutex_unlock(&modlock); -+ return ret; -+} +/* + * load a single module (API call). + * (recursive calls from load_module() succeed. + */ +int ast_load_resource(const char *resource_name) +{ + struct module *m; + int ret; + + ast_mutex_lock(&modlock); + m = __load_resource(resource_name, 0); + fixup(resource_name); + ret = (m->state == MS_FAILED) ? -1 : 0; + ast_mutex_unlock(&modlock); + return ret; +} #endif /*! \brief if enabled, log and output on console the module's name, and try load it */ @@ -947,13 +956,15 @@ done: return 0; } +#include <errno.h> /* for errno... */ + void ast_update_use_count(void) { /* Notify any module monitors that the use count for a resource has changed */ struct loadupdate *m; if (AST_LIST_LOCK(&module_list)) - ast_log(LOG_WARNING, "Failed to lock\n"); + ast_log(LOG_WARNING, "Failed to lock, errno %d\n", errno); AST_LIST_TRAVERSE(&updaters, m, next) m->updater(); AST_LIST_UNLOCK(&module_list); @@ -968,8 +979,9 @@ int ast_update_module_list(int (*modentry)(const char *module, const char *descr if (ast_mutex_trylock(&module_list.lock)) unlock = 0; - AST_LIST_TRAVERSE(&module_list, cur, next) - total_mod_loaded += modentry(cur->resource, cur->cb.description(), cur->cb.usecount(), like); + AST_LIST_TRAVERSE(&module_list, cur, next) { + total_mod_loaded += modentry(cur->resource, cur->cb->description(), cur->cb->usecnt, like); + } if (unlock) AST_LIST_UNLOCK(&module_list); diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c index d6617d5b89..e16b7f6941 100644 --- a/pbx/pbx_ael.c +++ b/pbx/pbx_ael.c @@ -71,7 +71,6 @@ static void FREE(void *ptr) static int aeldebug = 0; -static char *dtext = "Asterisk Extension Language Compiler"; static char *config = "extensions.ael"; static char *registrar = "pbx_ael"; @@ -1248,7 +1247,7 @@ static struct ast_cli_entry ael_cli[] = { /* * Standard module functions ... */ -int unload_module(void) +static int unload_module(void *mod) { ast_context_destroy(NULL, registrar); ast_cli_unregister_multiple(ael_cli, sizeof(ael_cli)/ sizeof(ael_cli[0])); @@ -1256,29 +1255,26 @@ int unload_module(void) } -int load_module(void) +static int load_module(void *mod) { ast_cli_register_multiple(ael_cli, sizeof(ael_cli)/ sizeof(ael_cli[0])); return (pbx_load_module()); } -int reload(void) +static int reload(void *mod) { ast_context_destroy(NULL, registrar); return pbx_load_module(); } -int usecount(void) +static const char *description(void) { - return 0; + return "Asterisk Extension Language Compiler"; } -const char *description(void) -{ - return dtext; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT, reload, NULL, NULL); diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index 21316deb0c..2fc9fcd63e 100644 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -30,8 +30,6 @@ #include <ctype.h> #include <errno.h> -#define STATIC_MODULE - #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -53,7 +51,6 @@ static void FREE(void *ptr) #define FREE free #endif -static char *dtext = "Text Extension Configuration"; static char *config = "extensions.conf"; static char *registrar = "pbx_config"; @@ -1326,7 +1323,7 @@ static struct ast_cli_entry reload_extensions_cli = /*! * Standard module functions ... */ -STATIC_MODULE int unload_module(void) +static int unload_module(void *mod) { ast_cli_unregister(&context_add_extension_cli); if (static_config && !write_protect_config) @@ -1515,7 +1512,7 @@ static int pbx_load_module(void) return 0; } -STATIC_MODULE int load_module(void) +static int load_module(void *mod) { if (pbx_load_module()) return -1; @@ -1533,7 +1530,7 @@ STATIC_MODULE int load_module(void) return 0; } -STATIC_MODULE int reload(void) +static int reload(void *mod) { if (clearglobalvars_config) pbx_builtin_clear_globals(); @@ -1541,19 +1538,15 @@ STATIC_MODULE int reload(void) return 0; } -STATIC_MODULE int usecount(void) -{ - return 0; -} - -STATIC_MODULE const char *description(void) +static const char *description(void) { - return dtext; + return "Text Extension Configuration"; } -STATIC_MODULE const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } -STD_MOD(MOD_1, reload, NULL, NULL); +/* XXX really no usecount ? */ +STD_MOD(MOD_1 | NO_USECOUNT, reload, NULL, NULL); diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index 9e30b86546..88fa3d7d1a 100644 --- a/pbx/pbx_dundi.c +++ b/pbx/pbx_dundi.c @@ -77,7 +77,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") extern char ast_config_AST_KEY_DIR[]; -static char *tdesc = "Distributed Universal Number Discovery (DUNDi)"; #define DUNDI_MODEL_INBOUND (1 << 0) #define DUNDI_MODEL_OUTBOUND (1 << 1) @@ -4603,7 +4602,7 @@ static int set_config(char *config_file, struct sockaddr_in* sin) return 0; } -int unload_module(void) +static int unload_module(void *mod) { STANDARD_HANGUP_LOCALUSERS; @@ -4629,19 +4628,20 @@ int unload_module(void) return 0; } -int reload(void) +static int reload(void *mod) { struct sockaddr_in sin; set_config("dundi.conf",&sin); return 0; } -int load_module(void) +static int load_module(void *mod) { int res = 0; struct sockaddr_in sin; char iabuf[INET_ADDRSTRLEN]; - + + __mod_desc = mod; dundi_set_output(dundi_debug_output); dundi_set_error(dundi_error_output); @@ -4709,21 +4709,14 @@ int load_module(void) return res; } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Distributed Universal Number Discovery (DUNDi)"; } -int usecount(void) -{ - int res; - /* XXX DUNDi cannot be unloaded XXX */ - return 1; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT | NO_UNLOAD, reload, NULL, NULL); diff --git a/pbx/pbx_loopback.c b/pbx/pbx_loopback.c index cadd73a148..a88f20e9f8 100644 --- a/pbx/pbx_loopback.c +++ b/pbx/pbx_loopback.c @@ -52,7 +52,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/crypto.h" #include "asterisk/astdb.h" -static char *tdesc = "Loopback Switch"; /* Loopback switch substitutes ${EXTEN}, ${CONTEXT}, and ${PRIORITY} into the data passed to it to try to get a string of the form: @@ -169,30 +168,27 @@ static struct ast_switch loopback_switch = matchmore: loopback_matchmore, }; -const char *description(void) +static const char *description(void) { - return tdesc; + return "Loopback Switch"; } -int usecount(void) -{ - return 1; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -int unload_module(void) +static int unload_module(void *mod) { ast_unregister_switch(&loopback_switch); return 0; } -int load_module(void) +static int load_module(void *mod) { ast_register_switch(&loopback_switch); return 0; } +/* XXX really no unload ? */ +STD_MOD(MOD_1 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c index 04d6fd0bde..1d9e803ed3 100644 --- a/pbx/pbx_realtime.c +++ b/pbx/pbx_realtime.c @@ -61,7 +61,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define EXT_DATA_SIZE 256 -static char *tdesc = "Realtime Switch"; /* Realtime switch looks up extensions in the supplied realtime table. @@ -246,30 +245,26 @@ static struct ast_switch realtime_switch = matchmore: realtime_matchmore, }; -const char *description(void) +static const char *description(void) { - return tdesc; + return "Realtime Switch"; } -int usecount(void) -{ - return 1; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } -int unload_module(void) +static int unload_module(void *mod) { ast_unregister_switch(&realtime_switch); return 0; } -int load_module(void) +static int load_module(void *mod) { ast_register_switch(&realtime_switch); return 0; } +STD_MOD(MOD_1 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); diff --git a/pbx/pbx_spool.c b/pbx/pbx_spool.c index 122b2e5aa8..e7136aa441 100644 --- a/pbx/pbx_spool.c +++ b/pbx/pbx_spool.c @@ -53,7 +53,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") * The spool file contains a header */ -static char *tdesc = "Outgoing Spool Support"; static char qdir[255]; struct outgoing { @@ -404,12 +403,12 @@ static void *scan_thread(void *unused) return NULL; } -int unload_module(void) +static int unload_module(void *mod) { return -1; } -int load_module(void) +static int load_module(void *mod) { pthread_t thread; pthread_attr_t attr; @@ -428,17 +427,14 @@ int load_module(void) return 0; } -const char *description(void) +static const char *description(void) { - return tdesc; + return "Outgoing Spool Support"; } -int usecount(void) -{ - return 1; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_1 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); diff --git a/res/res_adsi.c b/res/res_adsi.c index ca0da1f363..730b336d1e 100644 --- a/res/res_adsi.c +++ b/res/res_adsi.c @@ -1107,36 +1107,32 @@ static void adsi_load(void) } } -int reload(void) +static int reload(void *mod) { adsi_load(); return 0; } -int load_module(void) +static int load_module(void *mod) { adsi_load(); return 0; } -int unload_module(void) +static int unload_module(void *mod) { /* Can't unload this once we're loaded */ return -1; } -const char *description(void) +static const char *description(void) { return "ADSI Resource"; } -int usecount(void) -{ - /* We should never be unloaded */ - return 1; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, reload, NULL, NULL); diff --git a/res/res_agi.c b/res/res_agi.c index 9f16c9faa9..c007157830 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -95,7 +95,7 @@ static char *descrip = static int agidebug = 0; -LOCAL_USER_DECL; +struct module_symbols *me; #define TONE_BLOCK_SIZE 200 @@ -1952,7 +1952,7 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int argv[argc++] = stringp; argv[argc] = NULL; - LOCAL_USER_ADD(u); + u = ast_localuser_add(me, chan); #if 0 /* Answer if need be */ if (chan->_state != AST_STATE_UP) { @@ -1972,7 +1972,7 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int if (efd > -1) close(efd); } - LOCAL_USER_REMOVE(u); + ast_localuser_remove(me, u); return res; } @@ -2026,9 +2026,9 @@ static struct ast_cli_entry showagi = static struct ast_cli_entry dumpagihtml = { { "dump", "agihtml", NULL }, handle_dumpagihtml, "Dumps a list of agi command in html format", dumpagihtml_help }; -int unload_module(void) +static int unload_module(void *mod) { - STANDARD_HANGUP_LOCALUSERS; + ast_hangup_localusers(mod); ast_cli_unregister(&showagi); ast_cli_unregister(&dumpagihtml); ast_cli_unregister(&cli_debug); @@ -2038,8 +2038,9 @@ int unload_module(void) return ast_unregister_application(app); } -int load_module(void) +static int load_module(void *mod) { + me = mod; ast_cli_register(&showagi); ast_cli_register(&dumpagihtml); ast_cli_register(&cli_debug); @@ -2049,21 +2050,14 @@ int load_module(void) return ast_register_application(app, agi_exec, synopsis, descrip); } -const char *description(void) +static const char *description(void) { return "Asterisk Gateway Interface (AGI)"; - -} - -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; } -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_0, NULL, NULL, NULL); diff --git a/res/res_clioriginate.c b/res/res_clioriginate.c index 6a26bc23c6..a9ebb36479 100644 --- a/res/res_clioriginate.c +++ b/res/res_clioriginate.c @@ -42,7 +42,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$"); /*! The timeout for originated calls, in seconds */ #define TIMEOUT 30 -STANDARD_USECOUNT_DECL; +static struct module_symbols *me; static char orig_help[] = " There are two ways to use this command. A call can be originated between a\n" @@ -132,7 +132,7 @@ static int handle_orig(int fd, int argc, char *argv[]) if (ast_strlen_zero(argv[1]) || ast_strlen_zero(argv[2])) return RESULT_SHOWUSAGE; - STANDARD_INCREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, +1); if (!strcasecmp("application", argv[2])) { res = orig_app(argv[1], argv[3], argv[4]); @@ -141,7 +141,7 @@ static int handle_orig(int fd, int argc, char *argv[]) } else res = RESULT_SHOWUSAGE; - STANDARD_DECREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, -1); return res; } @@ -154,38 +154,32 @@ static char *complete_orig(const char *line, const char *word, int pos, int stat if (pos != 2) return NULL; - STANDARD_INCREMENT_USECOUNT; - + ast_atomic_fetchadd_int(&me->usecnt, +1); ret = ast_cli_complete(word, choices, state); - - STANDARD_DECREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, -1); return ret; } -int unload_module(void) +static int unload_module(void *mod) { return ast_cli_unregister(&cli_orig); } -int load_module(void) +static int load_module(void *mod) { + me = mod; return ast_cli_register(&cli_orig); } -const char *description(void) +static const char *description(void) { return "Call origination from the CLI"; - -} - -int usecount(void) -{ - return 0; } -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_0 | NO_USECOUNT, NULL, NULL, NULL); diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index b28059db53..f2634a93c2 100644 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -506,16 +506,16 @@ static struct ast_config_engine odbc_engine = { .update_func = update_odbc }; -int unload_module (void) +static int unload_module (void *mod) { + ast_hangup_localusers(mod); ast_config_engine_deregister(&odbc_engine); if (option_verbose) ast_verbose("res_config_odbc unloaded.\n"); - STANDARD_HANGUP_LOCALUSERS; return 0; } -int load_module (void) +static int load_module (void *mod) { ast_config_engine_register(&odbc_engine); if (option_verbose) @@ -523,19 +523,14 @@ int load_module (void) return 0; } -const char *description(void) +static const char *description(void) { return "ODBC Configuration"; - } -int usecount (void) -{ - /* never unload a config module */ - return 1; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index cf38386542..ecdce4dd17 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -547,7 +547,7 @@ static struct ast_config_engine pgsql_engine = { .update_func = update_pgsql }; -int load_module(void) +static int load_module(void *mod) { parse_config(); @@ -571,7 +571,7 @@ int load_module(void) return 0; } -int unload_module(void) +static int unload_module(void *mod) { /* Aquire control before doing anything to the module itself. */ ast_mutex_lock(&pgsql_lock); @@ -594,7 +594,7 @@ int unload_module(void) return 0; } -int reload(void) +static int reload(void *mod) { /* Aquire control before doing anything to the module itself. */ ast_mutex_lock(&pgsql_lock); @@ -691,14 +691,15 @@ int parse_config(void) return 1; } -const char *description(void) +static const char *description(void) { return "Postgresql RealTime Configuration Driver"; } -int usecount(void) +static int usecount(void) { + /* XXX check this... */ /* Try and get a lock. If unsuccessful, than that means another thread is using the pgsql object. */ if (ast_mutex_trylock(&pgsql_lock)) { ast_log(LOG_DEBUG, "Postgresql RealTime: Module usage count is 1.\n"); @@ -708,11 +709,17 @@ int usecount(void) return 0; } +<<<<<<< .mine +static const char *key(void) +======= const char *key(void) +>>>>>>> .r19220 { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_0, NULL, NULL, NULL); + static int pgsql_reconnect(const char *database) { char my_database[50]; diff --git a/res/res_convert.c b/res/res_convert.c index be441bc4b9..5530758741 100644 --- a/res/res_convert.c +++ b/res/res_convert.c @@ -39,7 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/cli.h" #include "asterisk/file.h" -STANDARD_USECOUNT_DECL; +struct module_symbols *me; /*! \brief Split the filename to basename and extension */ static int split_ext(char *filename, char **name, char **ext) @@ -65,7 +65,7 @@ static int cli_audio_convert(int fd, int argc, char *argv[]) char *file_in = NULL, *file_out = NULL; char *name_in, *ext_in, *name_out, *ext_out; - STANDARD_INCREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, +1); if (argc != 3 || ast_strlen_zero(argv[1]) || ast_strlen_zero(argv[2])) { ret = RESULT_SHOWUSAGE; @@ -116,7 +116,7 @@ fail_out: if (fs_in) ast_closestream(fs_in); - STANDARD_DECREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, -1); return ret; } @@ -132,31 +132,25 @@ static struct ast_cli_entry audio_convert_cli={ { "convert" , NULL }, cli_audio_convert, "Convert audio files", usage_audio_convert }; -int unload_module(void) +static int unload_module(void *mod) { return ast_cli_unregister(&audio_convert_cli); } -int load_module(void) +static int load_module(void *mod) { + me = mod; return ast_cli_register(&audio_convert_cli); } -const char *description(void) +static const char *description(void) { return "File format conversion CLI command"; - -} - -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; } -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD1; diff --git a/res/res_crypto.c b/res/res_crypto.c index ea0f05ae6f..d7c74d79fd 100644 --- a/res/res_crypto.c +++ b/res/res_crypto.c @@ -581,13 +581,13 @@ static int crypto_init(void) return 0; } -int reload(void) +static int reload(void *mod) { crypto_load(-1, -1); return 0; } -int load_module(void) +static int load_module(void *mod) { crypto_init(); if (ast_opt_init_keys) @@ -597,24 +597,19 @@ int load_module(void) return 0; } -int unload_module(void) +static int unload_module(void *mod) { /* Can't unload this once we're loaded */ return -1; } -const char *description(void) +static const char *description(void) { return "Cryptographic Digital Signatures"; } -int usecount(void) -{ - /* We should never be unloaded */ - return 1; -} - -const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, reload, NULL, NULL); diff --git a/res/res_features.c b/res/res_features.c index b114d23c05..f29ec9d45d 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -142,8 +142,6 @@ AST_MUTEX_DEFINE_STATIC(parking_lock); static pthread_t parking_thread; -LOCAL_USER_DECL; - char *ast_parking_ext(void) { return parking_ext; @@ -2201,14 +2199,16 @@ static int load_config(void) return ast_add_extension2(con, 1, ast_parking_ext(), 1, NULL, NULL, parkcall, strdup(""), FREE, registrar); } -int reload(void) { +static int reload(void *mod) +{ return load_config(); } -int load_module(void) +static int load_module(void *mod) { int res; + __mod_desc = mod; AST_LIST_HEAD_INIT(&feature_list); memset(parking_ext, 0, sizeof(parking_ext)); memset(parking_con, 0, sizeof(parking_con)); @@ -2230,7 +2230,7 @@ int load_module(void) } -int unload_module(void) +static int unload_module(void *mod) { STANDARD_HANGUP_LOCALUSERS; @@ -2242,25 +2242,14 @@ int unload_module(void) return ast_unregister_application(parkedcall); } -const char *description(void) +static const char *description(void) { return "Call Features Resource"; } -int usecount(void) -{ - /* Never allow parking to be unloaded because it will - unresolve needed symbols in the dialer */ -#if 0 - int res; - STANDARD_USECOUNT(res); - return res; -#else - return 1; -#endif -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_UNLOAD, reload, NULL, NULL); diff --git a/res/res_indications.c b/res/res_indications.c index 8e468c38a8..f4777e3c93 100644 --- a/res/res_indications.c +++ b/res/res_indications.c @@ -50,7 +50,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/utils.h" /* Globals */ -static const char dtext[] = "Indications Configuration"; static const char config[] = "indications.conf"; /* @@ -364,7 +363,7 @@ static struct ast_cli_entry show_indications_cli = /* * Standard module functions ... */ -int unload_module(void) +static int unload_module(void *mod) { /* remove the registed indications... */ ast_unregister_indication_country(NULL); @@ -379,9 +378,10 @@ int unload_module(void) } -int load_module(void) +static int load_module(void *mod) { - if (ind_load_module()) return -1; + if (ind_load_module()) + return -1; ast_cli_register(&add_indication_cli); ast_cli_register(&remove_indication_cli); @@ -392,7 +392,7 @@ int load_module(void) return 0; } -int reload(void) +static int reload(void *mod) { /* remove the registed indications... */ ast_unregister_indication_country(NULL); @@ -400,18 +400,14 @@ int reload(void) return ind_load_module(); } -const char *description(void) +static const char *description(void) { - /* that the following cast is needed, is yuk! */ - return (char*)dtext; + return "Indications Configuration"; } -int usecount(void) -{ - return 0; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_USECOUNT, reload, NULL, NULL); diff --git a/res/res_monitor.c b/res/res_monitor.c index 6c00c593ce..e570e726b1 100644 --- a/res/res_monitor.c +++ b/res/res_monitor.c @@ -31,8 +31,6 @@ #include <sys/stat.h> #include <libgen.h> /* dirname() */ -#define STATIC_MODULE - #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -647,7 +645,7 @@ static int unpause_monitor_action(struct mansession *s, struct message *m) } -STATIC_MODULE int load_module(void) +static int load_module(void *mod) { ast_register_application("Monitor", start_monitor_exec, monitor_synopsis, monitor_descrip); ast_register_application("StopMonitor", stop_monitor_exec, stopmonitor_synopsis, stopmonitor_descrip); @@ -663,7 +661,7 @@ STATIC_MODULE int load_module(void) return 0; } -STATIC_MODULE int unload_module(void) +static int unload_module(void *mod) { ast_unregister_application("Monitor"); ast_unregister_application("StopMonitor"); @@ -679,27 +677,14 @@ STATIC_MODULE int unload_module(void) return 0; } -STATIC_MODULE const char *description(void) +static const char *description(void) { return "Call Monitoring Resource"; } -STATIC_MODULE int usecount(void) -{ - /* Never allow monitor to be unloaded because it will - unresolve needed symbols in the channel */ -#if 0 - int res; - STANDARD_USECOUNT(res); - return res; -#else - return 1; -#endif -} - -STATIC_MODULE const char *key(void) +static const char *key(void) { return ASTERISK_GPL_KEY; } -STD_MOD(MOD_0, NULL, NULL, NULL); /* MOD_0 because it exports some symbols */ +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); /* MOD_0 because it exports some symbols */ diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index e82d6fa19e..9b1113a448 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -1164,7 +1164,7 @@ static int init_classes(int reload) return 1; } -int load_module(void) +static int load_module(void *mod) { int res; @@ -1191,7 +1191,7 @@ int load_module(void) return 0; } -int reload(void) +static int reload(void *mod) { if (init_classes(1)) ast_install_music_functions(local_ast_moh_start, local_ast_moh_stop, local_ast_moh_cleanup); @@ -1199,30 +1199,19 @@ int reload(void) return 0; } -int unload_module(void) +static int unload_module(void *mod) { return -1; } -const char *description(void) +static const char *description(void) { return "Music On Hold Resource"; } -int usecount(void) -{ - /* Never allow Music On Hold to be unloaded - unresolve needed symbols in the dialer */ -#if 0 - int res; - STANDARD_USECOUNT(res); - return res; -#else - return 1; -#endif -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, reload, NULL, NULL); diff --git a/res/res_odbc.c b/res/res_odbc.c index 3093c1f071..cc255844dc 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -106,7 +106,6 @@ static void odbc_init(void) } } -static char *tdesc = "ODBC Resource"; /* internal stuff */ SQLHSTMT odbc_prepare_and_execute(odbc_obj *obj, SQLHSTMT (*prepare_cb)(odbc_obj *obj, void *data), void *data) @@ -578,7 +577,7 @@ odbc_status odbc_obj_connect(odbc_obj *obj) LOCAL_USER_DECL; -int unload_module(void) +static int unload_module(void *mod) { STANDARD_HANGUP_LOCALUSERS; odbc_destroy(); @@ -589,7 +588,7 @@ int unload_module(void) return 0; } -int load_module(void) +static int load_module(void *mod) { odbc_init(); load_odbc_config(); @@ -600,19 +599,14 @@ int load_module(void) return 0; } -const char *description(void) +static const char *description(void) { - return tdesc; + return "ODBC Resource"; } -int usecount(void) -{ - int res; - STANDARD_USECOUNT(res); - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0, NULL, NULL, NULL); diff --git a/res/res_smdi.c b/res/res_smdi.c index 681fd7f410..2f8515440c 100644 --- a/res/res_smdi.c +++ b/res/res_smdi.c @@ -48,7 +48,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") /* Message expiry time in milliseconds */ #define SMDI_MSG_EXPIRY_TIME 30000 /* 30 seconds */ -static const char tdesc[] = "Asterisk Simplified Message Desk Interface (SMDI) Module"; static const char config_file[] = "smdi.conf"; static void ast_smdi_md_message_push(struct ast_smdi_interface *iface, struct ast_smdi_md_message *msg); @@ -57,9 +56,7 @@ static void ast_smdi_mwi_message_push(struct ast_smdi_interface *iface, struct a static void *smdi_read(void *iface_p); static int smdi_load(int reload); -/* Use count stuff */ - -LOCAL_USER_DECL; +struct module_symbols *me; /* initialized in load_module() */ /*! \brief SMDI interface container. */ struct ast_smdi_interface_container { @@ -504,7 +501,7 @@ void ast_smdi_interface_destroy(struct ast_smdi_interface *iface) ASTOBJ_CONTAINER_DESTROY(&iface->mwi_q); free(iface); - STANDARD_DECREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, -1); } /*! @@ -688,7 +685,7 @@ static int smdi_load(int reload) ASTOBJ_CONTAINER_LINK(&smdi_ifaces, iface); ASTOBJ_UNREF(iface, ast_smdi_interface_destroy); - STANDARD_INCREMENT_USECOUNT; + ast_atomic_fetchadd_int(&me->usecnt, +1); } else { ast_log(LOG_NOTICE, "Ignoring unknown option %s in %s\n", v->name, config_file); } @@ -709,15 +706,16 @@ static int smdi_load(int reload) } -const char *description(void) +static const char *description(void) { - return (char *) tdesc; + return "Asterisk Simplified Message Desk Interface (SMDI) Module"; } -int load_module(void) +static int load_module(void *mod) { int res; + me = mod; /* initialize our containers */ memset(&smdi_ifaces, 0, sizeof(smdi_ifaces)); ASTOBJ_CONTAINER_INIT(&smdi_ifaces); @@ -733,7 +731,7 @@ int load_module(void) return 0; } -int unload_module(void) +static int unload_module(void *mod) { /* this destructor stops any running smdi_read threads */ ASTOBJ_CONTAINER_DESTROYALL(&smdi_ifaces, ast_smdi_interface_destroy); @@ -742,7 +740,7 @@ int unload_module(void) return 0; } -int reload(void) +static int reload(void *mod) { int res; @@ -757,16 +755,9 @@ int reload(void) return 0; } -int usecount(void) -{ - int res; - - STANDARD_USECOUNT(res); - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0, reload, NULL, NULL); diff --git a/res/res_speech.c b/res/res_speech.c index 58ef56447a..32b15d79e6 100644 --- a/res/res_speech.c +++ b/res/res_speech.c @@ -41,7 +41,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$"); #include "asterisk/options.h" #include "asterisk/speech.h" -static char *tdesc = "Generic Speech Recognition API"; static AST_LIST_HEAD_STATIC(engines, ast_speech_engine); static struct ast_speech_engine *default_engine = NULL; @@ -337,13 +336,13 @@ int ast_speech_unregister(char *engine_name) return res; } -int unload_module(void) +static int unload_module(void *mod) { /* We can not be unloaded */ return -1; } -int load_module(void) +static int load_module(void *mod) { int res = 0; @@ -353,24 +352,14 @@ int load_module(void) return res; } -int reload(void) +static const char *description(void) { - return 0; + return "Generic Speech Recognition API"; } -const char *description(void) -{ - return tdesc; -} - -int usecount(void) -{ - int res = 0; - - return res; -} - -const char *key() +static const char *key(void) { return ASTERISK_GPL_KEY; } + +STD_MOD(MOD_0 | NO_USECOUNT | NO_UNLOAD, NULL, NULL, NULL); diff --git a/translate.c b/translate.c index 92a3a97536..20da091138 100644 --- a/translate.c +++ b/translate.c @@ -31,6 +31,7 @@ #include <string.h> #include <stdio.h> +#define MOD_LOADER /* not really a module */ #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -39,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/channel.h" #include "asterisk/logger.h" #include "asterisk/translate.h" +#include "asterisk/module.h" #include "asterisk/options.h" #include "asterisk/frame.h" #include "asterisk/sched.h" @@ -94,6 +96,8 @@ static void *newpvt(struct ast_translator *t) int len; int useplc = t->plc_samples > 0 && t->useplc; /* cache, because it can change on the fly */ char *ofs; + struct module_symbols *ms = t->module; + /* * compute the required size adding private descriptor, * plc, buffer, AST_FRIENDLY_OFFSET. @@ -123,9 +127,7 @@ static void *newpvt(struct ast_translator *t) free(pvt); return NULL; } - ast_mutex_lock(&t->lockp->lock); - t->lockp->usecnt++; - ast_mutex_unlock(&t->lockp->lock); + ast_atomic_fetchadd_int(&ms->usecnt, +1); ast_update_use_count(); return pvt; } @@ -133,13 +135,12 @@ static void *newpvt(struct ast_translator *t) static void destroy(struct ast_trans_pvt *pvt) { struct ast_translator *t = pvt->t; + struct module_symbols *ms = t->module; if (t->destroy) t->destroy(pvt); free(pvt); - ast_mutex_lock(&t->lockp->lock); - t->lockp->usecnt--; - ast_mutex_unlock(&t->lockp->lock); + ast_atomic_fetchadd_int(&ms->usecnt, -1); ast_update_use_count(); } @@ -519,14 +520,15 @@ static char show_trans_usage[] = static struct ast_cli_entry show_trans = { { "show", "translation", NULL }, show_translation, "Display translation matrix", show_trans_usage }; -int ast_register_translator(struct ast_translator *t) +int ast_register_translator(struct ast_translator *t, void *module) { static int added_cli = 0; - if (t->lockp == NULL) { - ast_log(LOG_WARNING, "Missing lock pointer, you need to supply one\n"); + if (module == NULL) { + ast_log(LOG_WARNING, "Missing module pointer, you need to supply one\n"); return -1; } + t->module = module; if (t->buf_size == 0) { ast_log(LOG_WARNING, "empty buf size, you need to supply one\n"); return -1; @@ -561,10 +563,6 @@ int ast_register_translator(struct ast_translator *t) int align = (char *)&p.b - (char *)&p.a; t->buf_size = ((t->buf_size + align - 1)/align)*align; } - if (t->lockp->usecnt < 0) { /* XXX need to initialize the lock */ - ast_mutex_init(&t->lockp->lock); - t->lockp->usecnt = 0; - } if (t->frameout == NULL) t->frameout = default_frameout; -- GitLab