From 2f69b332d8e7b9fbd52f837f477da8abd86e57d8 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Tue, 9 Dec 2003 23:55:17 +0000 Subject: [PATCH] Cleanup unload calls git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1850 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax.c | 51 ++++++----- channels/chan_iax2.c | 51 ++++++----- channels/chan_modem.c | 187 ++++++++++++++++++++------------------- channels/chan_nbs.c | 23 ++--- channels/chan_phone.c | 197 +++++++++++++++++++++--------------------- channels/chan_vofr.c | 115 ++++++++++++------------ channels/chan_vpb.c | 110 +++++++++++------------ channels/chan_zap.c | 16 ++-- 8 files changed, 390 insertions(+), 360 deletions(-) diff --git a/channels/chan_iax.c b/channels/chan_iax.c index 39515dbb87..091c8a1fc8 100755 --- a/channels/chan_iax.c +++ b/channels/chan_iax.c @@ -5330,6 +5330,33 @@ static struct ast_switch iax_switch = matchmore: iax_matchmore, }; +static int __unload_module(void) +{ + int x; + /* Cancel the network thread, close the net socket */ + pthread_cancel(netthreadid); + pthread_join(netthreadid, NULL); + close(netsocket); + for (x=0;xname, "device")) { - tmp = mkif(v->value); - if (tmp) { - tmp->next = iflist; - iflist = tmp; - - } else { - ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); - ast_destroy(cfg); - ast_mutex_unlock(&iflock); - unload_module(); - return -1; - } - } else if (!strcasecmp(v->name, "driver")) { - snprintf(driver, sizeof(driver), "chan_modem_%s.so", v->value); - if (option_verbose > 1) - ast_verbose(VERBOSE_PREFIX_2 "Loading modem driver %s", driver); - - if (ast_load_resource(driver)) { - ast_log(LOG_ERROR, "Failed to load driver %s\n", driver); - ast_destroy(cfg); - ast_mutex_unlock(&iflock); - unload_module(); - return -1; - } - } else if (!strcasecmp(v->name, "mode")) { - if (!strncasecmp(v->value, "ri", 2)) - gmode = MODEM_MODE_WAIT_RING; - else if (!strncasecmp(v->value, "im", 2)) - gmode = MODEM_MODE_IMMEDIATE; - else if (!strncasecmp(v->value, "an", 2)) - gmode = MODEM_MODE_WAIT_ANSWER; - else - ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value); - } else if (!strcasecmp(v->name, "stripmsd")) { - stripmsd = atoi(v->value); - } else if (!strcasecmp(v->name, "type")) { - strncpy(mtype, v->value, sizeof(mtype)-1); - } else if (!strcasecmp(v->name, "initstr")) { - strncpy(initstr, v->value, sizeof(initstr)-1); - } else if (!strcasecmp(v->name, "dialtype")) { - dialtype = toupper(v->value[0]); - } else if (!strcasecmp(v->name, "context")) { - strncpy(context, v->value, sizeof(context)-1); - } else if (!strcasecmp(v->name, "msn")) { - strncpy(msn, v->value, sizeof(msn)-1); - } else if (!strcasecmp(v->name, "incomingmsn")) { - strncpy(incomingmsn, v->value, sizeof(incomingmsn)-1); - } else if (!strcasecmp(v->name, "language")) { - strncpy(language, v->value, sizeof(language)-1); - } else if (!strcasecmp(v->name, "group")) { - cur_group = get_group(v->value); - } - v = v->next; - } - ast_mutex_unlock(&iflock); - if (ast_channel_register(type, tdesc, /* XXX Don't know our types -- maybe we should register more than one XXX */ - AST_FORMAT_SLINEAR, modem_request)) { - ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); - ast_destroy(cfg); - unload_module(); - return -1; - } - ast_destroy(cfg); - /* And start the monitor for the first time */ - restart_monitor(); - return 0; -} - -int unload_module() +static int __unload_module(void) { struct ast_modem_pvt *p, *pl; /* First, take us out of the channel loop */ @@ -983,6 +893,101 @@ int unload_module() return 0; } +int unload_module() +{ + return __unload_module(); +} + +int load_module() +{ + struct ast_config *cfg; + struct ast_variable *v; + struct ast_modem_pvt *tmp; + char driver[80]; + cfg = ast_load(config); + + /* We *must* have a config file otherwise stop immediately */ + if (!cfg) { + ast_log(LOG_ERROR, "Unable to load config %s\n", config); + return -1; + } + if (ast_mutex_lock(&iflock)) { + /* It's a little silly to lock it, but we mind as well just to be sure */ + ast_log(LOG_ERROR, "Unable to lock interface list???\n"); + return -1; + } + v = ast_variable_browse(cfg, "interfaces"); + while(v) { + /* Create the interface list */ + if (!strcasecmp(v->name, "device")) { + tmp = mkif(v->value); + if (tmp) { + tmp->next = iflist; + iflist = tmp; + + } else { + ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); + ast_destroy(cfg); + ast_mutex_unlock(&iflock); + __unload_module(); + return -1; + } + } else if (!strcasecmp(v->name, "driver")) { + snprintf(driver, sizeof(driver), "chan_modem_%s.so", v->value); + if (option_verbose > 1) + ast_verbose(VERBOSE_PREFIX_2 "Loading modem driver %s", driver); + + if (ast_load_resource(driver)) { + ast_log(LOG_ERROR, "Failed to load driver %s\n", driver); + ast_destroy(cfg); + ast_mutex_unlock(&iflock); + __unload_module(); + return -1; + } + } else if (!strcasecmp(v->name, "mode")) { + if (!strncasecmp(v->value, "ri", 2)) + gmode = MODEM_MODE_WAIT_RING; + else if (!strncasecmp(v->value, "im", 2)) + gmode = MODEM_MODE_IMMEDIATE; + else if (!strncasecmp(v->value, "an", 2)) + gmode = MODEM_MODE_WAIT_ANSWER; + else + ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value); + } else if (!strcasecmp(v->name, "stripmsd")) { + stripmsd = atoi(v->value); + } else if (!strcasecmp(v->name, "type")) { + strncpy(mtype, v->value, sizeof(mtype)-1); + } else if (!strcasecmp(v->name, "initstr")) { + strncpy(initstr, v->value, sizeof(initstr)-1); + } else if (!strcasecmp(v->name, "dialtype")) { + dialtype = toupper(v->value[0]); + } else if (!strcasecmp(v->name, "context")) { + strncpy(context, v->value, sizeof(context)-1); + } else if (!strcasecmp(v->name, "msn")) { + strncpy(msn, v->value, sizeof(msn)-1); + } else if (!strcasecmp(v->name, "incomingmsn")) { + strncpy(incomingmsn, v->value, sizeof(incomingmsn)-1); + } else if (!strcasecmp(v->name, "language")) { + strncpy(language, v->value, sizeof(language)-1); + } else if (!strcasecmp(v->name, "group")) { + cur_group = get_group(v->value); + } + v = v->next; + } + ast_mutex_unlock(&iflock); + if (ast_channel_register(type, tdesc, /* XXX Don't know our types -- maybe we should register more than one XXX */ + AST_FORMAT_SLINEAR, modem_request)) { + ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); + ast_destroy(cfg); + __unload_module(); + return -1; + } + ast_destroy(cfg); + /* And start the monitor for the first time */ + restart_monitor(); + return 0; +} + int usecount(void) { int res; diff --git a/channels/chan_nbs.c b/channels/chan_nbs.c index 0cf50f56cc..cd40ce1674 100755 --- a/channels/chan_nbs.c +++ b/channels/chan_nbs.c @@ -252,27 +252,30 @@ static struct ast_channel *nbs_request(char *type, int format, void *data) return tmp; } +static int __unload_module(void) +{ + /* First, take us out of the channel loop */ + ast_channel_unregister(type); + return 0; +} + +int unload_module(void) +{ + return __unload_module(); +} + int load_module() { /* Make sure we can register our Adtranphone channel type */ if (ast_channel_register(type, tdesc, AST_FORMAT_SLINEAR, nbs_request)) { ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); - unload_module(); + __unload_module(); return -1; } return 0; } - - -int unload_module() -{ - /* First, take us out of the channel loop */ - ast_channel_unregister(type); - return 0; -} - int usecount() { int res; diff --git a/channels/chan_phone.c b/channels/chan_phone.c index 64b241365f..7757348429 100755 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -1051,103 +1051,7 @@ static int parse_gain_value(char *gain_type, char *value) return (int)gain; } -int load_module() -{ - struct ast_config *cfg; - struct ast_variable *v; - struct phone_pvt *tmp; - int mode = MODE_IMMEDIATE; - int txgain = DEFAULT_GAIN, rxgain = DEFAULT_GAIN; /* default gain 1.0 */ - cfg = ast_load(config); - - /* We *must* have a config file otherwise stop immediately */ - if (!cfg) { - ast_log(LOG_ERROR, "Unable to load config %s\n", config); - return -1; - } - if (ast_mutex_lock(&iflock)) { - /* It's a little silly to lock it, but we mind as well just to be sure */ - ast_log(LOG_ERROR, "Unable to lock interface list???\n"); - return -1; - } - v = ast_variable_browse(cfg, "interfaces"); - while(v) { - /* Create the interface list */ - if (!strcasecmp(v->name, "device")) { - tmp = mkif(v->value, mode, txgain, rxgain); - if (tmp) { - tmp->next = iflist; - iflist = tmp; - - } else { - ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); - ast_destroy(cfg); - ast_mutex_unlock(&iflock); - unload_module(); - return -1; - } - } else if (!strcasecmp(v->name, "silencesupression")) { - silencesupression = ast_true(v->value); - } else if (!strcasecmp(v->name, "language")) { - strncpy(language, v->value, sizeof(language)-1); - } else if (!strcasecmp(v->name, "callerid")) { - strncpy(callerid, v->value, sizeof(callerid)-1); - } else if (!strcasecmp(v->name, "mode")) { - if (!strncasecmp(v->value, "di", 2)) - mode = MODE_DIALTONE; - else if (!strncasecmp(v->value, "im", 2)) - mode = MODE_IMMEDIATE; - else if (!strncasecmp(v->value, "fx", 2)) - mode = MODE_FXO; - else - ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value); - } else if (!strcasecmp(v->name, "context")) { - strncpy(context, v->value, sizeof(context)-1); - } else if (!strcasecmp(v->name, "format")) { - if (!strcasecmp(v->value, "g723.1")) { - prefformat = AST_FORMAT_G723_1; - } else if (!strcasecmp(v->value, "slinear")) { - prefformat = AST_FORMAT_SLINEAR; - } else if (!strcasecmp(v->value, "ulaw")) { - prefformat = AST_FORMAT_ULAW; - } else - ast_log(LOG_WARNING, "Unknown format '%s'\n", v->value); - } else if (!strcasecmp(v->name, "echocancel")) { - if (!strcasecmp(v->value, "off")) { - echocancel = AEC_OFF; - } else if (!strcasecmp(v->value, "low")) { - echocancel = AEC_LOW; - } else if (!strcasecmp(v->value, "medium")) { - echocancel = AEC_MED; - } else if (!strcasecmp(v->value, "high")) { - echocancel = AEC_HIGH; - } else - ast_log(LOG_WARNING, "Unknown echo cancellation '%s'\n", v->value); - } else if (!strcasecmp(v->name, "txgain")) { - txgain = parse_gain_value(v->name, v->value); - } else if (!strcasecmp(v->name, "rxgain")) { - rxgain = parse_gain_value(v->name, v->value); - } - v = v->next; - } - ast_mutex_unlock(&iflock); - /* Make sure we can register our Adtranphone channel type */ - if (ast_channel_register(type, tdesc, - AST_FORMAT_G723_1 | AST_FORMAT_SLINEAR | AST_FORMAT_ULAW, phone_request)) { - ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); - ast_destroy(cfg); - unload_module(); - return -1; - } - ast_destroy(cfg); - /* And start the monitor for the first time */ - restart_monitor(); - return 0; -} - - - -int unload_module() +static int __unload_module(void) { struct phone_pvt *p, *pl; /* First, take us out of the channel loop */ @@ -1200,6 +1104,105 @@ int unload_module() return 0; } +int unload_module(void) +{ + return __unload_module(); +} + +int load_module() +{ + struct ast_config *cfg; + struct ast_variable *v; + struct phone_pvt *tmp; + int mode = MODE_IMMEDIATE; + int txgain = DEFAULT_GAIN, rxgain = DEFAULT_GAIN; /* default gain 1.0 */ + cfg = ast_load(config); + + /* We *must* have a config file otherwise stop immediately */ + if (!cfg) { + ast_log(LOG_ERROR, "Unable to load config %s\n", config); + return -1; + } + if (ast_mutex_lock(&iflock)) { + /* It's a little silly to lock it, but we mind as well just to be sure */ + ast_log(LOG_ERROR, "Unable to lock interface list???\n"); + return -1; + } + v = ast_variable_browse(cfg, "interfaces"); + while(v) { + /* Create the interface list */ + if (!strcasecmp(v->name, "device")) { + tmp = mkif(v->value, mode, txgain, rxgain); + if (tmp) { + tmp->next = iflist; + iflist = tmp; + + } else { + ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); + ast_destroy(cfg); + ast_mutex_unlock(&iflock); + __unload_module(); + return -1; + } + } else if (!strcasecmp(v->name, "silencesupression")) { + silencesupression = ast_true(v->value); + } else if (!strcasecmp(v->name, "language")) { + strncpy(language, v->value, sizeof(language)-1); + } else if (!strcasecmp(v->name, "callerid")) { + strncpy(callerid, v->value, sizeof(callerid)-1); + } else if (!strcasecmp(v->name, "mode")) { + if (!strncasecmp(v->value, "di", 2)) + mode = MODE_DIALTONE; + else if (!strncasecmp(v->value, "im", 2)) + mode = MODE_IMMEDIATE; + else if (!strncasecmp(v->value, "fx", 2)) + mode = MODE_FXO; + else + ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value); + } else if (!strcasecmp(v->name, "context")) { + strncpy(context, v->value, sizeof(context)-1); + } else if (!strcasecmp(v->name, "format")) { + if (!strcasecmp(v->value, "g723.1")) { + prefformat = AST_FORMAT_G723_1; + } else if (!strcasecmp(v->value, "slinear")) { + prefformat = AST_FORMAT_SLINEAR; + } else if (!strcasecmp(v->value, "ulaw")) { + prefformat = AST_FORMAT_ULAW; + } else + ast_log(LOG_WARNING, "Unknown format '%s'\n", v->value); + } else if (!strcasecmp(v->name, "echocancel")) { + if (!strcasecmp(v->value, "off")) { + echocancel = AEC_OFF; + } else if (!strcasecmp(v->value, "low")) { + echocancel = AEC_LOW; + } else if (!strcasecmp(v->value, "medium")) { + echocancel = AEC_MED; + } else if (!strcasecmp(v->value, "high")) { + echocancel = AEC_HIGH; + } else + ast_log(LOG_WARNING, "Unknown echo cancellation '%s'\n", v->value); + } else if (!strcasecmp(v->name, "txgain")) { + txgain = parse_gain_value(v->name, v->value); + } else if (!strcasecmp(v->name, "rxgain")) { + rxgain = parse_gain_value(v->name, v->value); + } + v = v->next; + } + ast_mutex_unlock(&iflock); + /* Make sure we can register our Adtranphone channel type */ + if (ast_channel_register(type, tdesc, + AST_FORMAT_G723_1 | AST_FORMAT_SLINEAR | AST_FORMAT_ULAW, phone_request)) { + ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); + ast_destroy(cfg); + __unload_module(); + return -1; + } + ast_destroy(cfg); + /* And start the monitor for the first time */ + restart_monitor(); + return 0; +} + int usecount() { int res; diff --git a/channels/chan_vofr.c b/channels/chan_vofr.c index 37d8a1f525..289e101a95 100755 --- a/channels/chan_vofr.c +++ b/channels/chan_vofr.c @@ -1136,61 +1136,7 @@ static struct ast_channel *vofr_request(char *type, int format, void *data) return tmp; } -int load_module() -{ - struct ast_config *cfg; - struct ast_variable *v; - struct vofr_pvt *tmp; - cfg = ast_load(config); - - /* We *must* have a config file otherwise stop immediately */ - if (!cfg) { - ast_log(LOG_ERROR, "Unable to load config %s\n", config); - return -1; - } - if (ast_mutex_lock(&iflock)) { - /* It's a little silly to lock it, but we mind as well just to be sure */ - ast_log(LOG_ERROR, "Unable to lock interface list???\n"); - return -1; - } - v = ast_variable_browse(cfg, "interfaces"); - while(v) { - /* Create the interface list */ - if (!strcasecmp(v->name, "user") || - !strcasecmp(v->name, "network")) { - tmp = mkif(v->name, v->value); - if (tmp) { - tmp->next = iflist; - iflist = tmp; - } else { - ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); - ast_destroy(cfg); - ast_mutex_unlock(&iflock); - unload_module(); - return -1; - } - } else if (!strcasecmp(v->name, "context")) { - strncpy(context, v->value, sizeof(context)-1); - } else if (!strcasecmp(v->name, "language")) { - strncpy(language, v->value, sizeof(language)-1); - } - v = v->next; - } - ast_mutex_unlock(&iflock); - /* Make sure we can register our AdtranVoFR channel type */ - if (ast_channel_register(type, tdesc, AST_FORMAT_G723_1, vofr_request)) { - ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); - ast_destroy(cfg); - unload_module(); - return -1; - } - ast_destroy(cfg); - /* And start the monitor for the first time */ - restart_monitor(); - return 0; -} - -int unload_module() +static int __unload_module(void) { struct vofr_pvt *p, *pl; /* First, take us out of the channel loop */ @@ -1244,6 +1190,65 @@ int unload_module() return 0; } +int unload_module() +{ + return __unload_module(); +} + +int load_module() +{ + struct ast_config *cfg; + struct ast_variable *v; + struct vofr_pvt *tmp; + cfg = ast_load(config); + + /* We *must* have a config file otherwise stop immediately */ + if (!cfg) { + ast_log(LOG_ERROR, "Unable to load config %s\n", config); + return -1; + } + if (ast_mutex_lock(&iflock)) { + /* It's a little silly to lock it, but we mind as well just to be sure */ + ast_log(LOG_ERROR, "Unable to lock interface list???\n"); + return -1; + } + v = ast_variable_browse(cfg, "interfaces"); + while(v) { + /* Create the interface list */ + if (!strcasecmp(v->name, "user") || + !strcasecmp(v->name, "network")) { + tmp = mkif(v->name, v->value); + if (tmp) { + tmp->next = iflist; + iflist = tmp; + } else { + ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); + ast_destroy(cfg); + ast_mutex_unlock(&iflock); + __unload_module(); + return -1; + } + } else if (!strcasecmp(v->name, "context")) { + strncpy(context, v->value, sizeof(context)-1); + } else if (!strcasecmp(v->name, "language")) { + strncpy(language, v->value, sizeof(language)-1); + } + v = v->next; + } + ast_mutex_unlock(&iflock); + /* Make sure we can register our AdtranVoFR channel type */ + if (ast_channel_register(type, tdesc, AST_FORMAT_G723_1, vofr_request)) { + ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); + ast_destroy(cfg); + __unload_module(); + return -1; + } + ast_destroy(cfg); + /* And start the monitor for the first time */ + restart_monitor(); + return 0; +} + int usecount() { int res; diff --git a/channels/chan_vpb.c b/channels/chan_vpb.c index d4aee06f52..b2a54d37cd 100755 --- a/channels/chan_vpb.c +++ b/channels/chan_vpb.c @@ -1112,6 +1112,62 @@ static float parse_gain_value(char *gain_type, char *value) return gain; } +static int __unload_module(void) +{ + struct vpb_pvt *p; + /* First, take us out of the channel loop */ + ast_channel_unregister(type); + + ast_mutex_lock(&iflock); { + /* Hangup all interfaces if they have an owner */ + p = iflist; + while(p) { + if (p->owner) + ast_softhangup(p->owner, AST_SOFTHANGUP_APPUNLOAD); + p = p->next; + } + iflist = NULL; + } ast_mutex_unlock(&iflock); + + ast_mutex_lock(&monlock); { + if (mthreadactive > -1) { + pthread_cancel(monitor_thread); + pthread_join(monitor_thread, NULL); + } + mthreadactive = -2; + } ast_mutex_unlock(&monlock); + + ast_mutex_lock(&iflock); { + /* Destroy all the interfaces and free their memory */ + + while(iflist) { + p = iflist; + ast_mutex_destroy(&p->lock); + pthread_cancel(p->readthread); + p->readthread = 0; + + iflist = iflist->next; + + free(p); + } + iflist = NULL; + } ast_mutex_unlock(&iflock); + + ast_mutex_lock(&bridge_lock); { + memset(bridges, 0, sizeof bridges); + } ast_mutex_unlock(&bridge_lock); + ast_mutex_destroy(&bridge_lock); + + tcounter = 0; + + return 0; +} + +int unload_module(void) +{ + return __unload_module(); +} + int load_module() { struct ast_config *cfg; @@ -1213,65 +1269,13 @@ int load_module() if (error) - unload_module(); + __unload_module(); else restart_monitor(); /* And start the monitor for the first time */ return error; } - -int unload_module() -{ - struct vpb_pvt *p; - /* First, take us out of the channel loop */ - ast_channel_unregister(type); - - ast_mutex_lock(&iflock); { - /* Hangup all interfaces if they have an owner */ - p = iflist; - while(p) { - if (p->owner) - ast_softhangup(p->owner, AST_SOFTHANGUP_APPUNLOAD); - p = p->next; - } - iflist = NULL; - } ast_mutex_unlock(&iflock); - - ast_mutex_lock(&monlock); { - if (mthreadactive > -1) { - pthread_cancel(monitor_thread); - pthread_join(monitor_thread, NULL); - } - mthreadactive = -2; - } ast_mutex_unlock(&monlock); - - ast_mutex_lock(&iflock); { - /* Destroy all the interfaces and free their memory */ - - while(iflist) { - p = iflist; - ast_mutex_destroy(&p->lock); - pthread_cancel(p->readthread); - p->readthread = 0; - - iflist = iflist->next; - - free(p); - } - iflist = NULL; - } ast_mutex_unlock(&iflock); - - ast_mutex_lock(&bridge_lock); { - memset(bridges, 0, sizeof bridges); - } ast_mutex_unlock(&bridge_lock); - ast_mutex_destroy(&bridge_lock); - - tcounter = 0; - - return 0; -} - int usecount() { int res; diff --git a/channels/chan_zap.c b/channels/chan_zap.c index e366dc5d85..ffeedc19f0 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -6914,7 +6914,7 @@ static int action_zapdialoffhook(struct mansession *s, struct message *m) return 0; } -static int zt_unload(void) +static int __unload_module(void) { struct zt_pvt *p, *pl; /* First, take us out of the channel loop */ @@ -6977,7 +6977,7 @@ static int zt_unload(void) int unload_module() { - return zt_unload(); + return __unload_module(); } static int setup_zap(void) @@ -7016,7 +7016,7 @@ static int setup_zap(void) ast_log(LOG_ERROR, "Signalling must be specified before any channels are.\n"); ast_destroy(cfg); ast_mutex_unlock(&iflock); - zt_unload(); + __unload_module(); return -1; } c = v->value; @@ -7033,7 +7033,7 @@ static int setup_zap(void) ast_log(LOG_ERROR, "Syntax error parsing '%s' at '%s'\n", v->value, chan); ast_destroy(cfg); ast_mutex_unlock(&iflock); - zt_unload(); + __unload_module(); return -1; } if (finish < start) { @@ -7051,7 +7051,7 @@ static int setup_zap(void) ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value); ast_destroy(cfg); ast_mutex_unlock(&iflock); - zt_unload(); + __unload_module(); return -1; } } @@ -7293,7 +7293,7 @@ static int setup_zap(void) ast_log(LOG_ERROR, "Unknown switchtype '%s'\n", v->value); ast_destroy(cfg); ast_mutex_unlock(&iflock); - zt_unload(); + __unload_module(); return -1; } } else if (!strcasecmp(v->name, "minunused")) { @@ -7354,12 +7354,12 @@ int load_module(void) /* Make sure we can register our Zap channel type */ if (ast_channel_register(type, tdesc, AST_FORMAT_SLINEAR | AST_FORMAT_ULAW, zt_request)) { ast_log(LOG_ERROR, "Unable to register channel class %s\n", type); - zt_unload(); + __unload_module(); return -1; } if (ast_channel_register(typecompat, tdesc, AST_FORMAT_SLINEAR | AST_FORMAT_ULAW, zt_request)) { ast_log(LOG_ERROR, "Unable to register channel class %s\n", typecompat); - zt_unload(); + __unload_module(); return -1; } #ifdef ZAPATA_PRI