Cleanup unload calls
authorMark Spencer <markster@digium.com>
Tue, 9 Dec 2003 23:55:17 +0000 (23:55 +0000)
committerMark Spencer <markster@digium.com>
Tue, 9 Dec 2003 23:55:17 +0000 (23:55 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1850 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax.c
channels/chan_iax2.c
channels/chan_modem.c
channels/chan_nbs.c
channels/chan_phone.c
channels/chan_vofr.c
channels/chan_vpb.c
channels/chan_zap.c

index 39515db..091c8a1 100755 (executable)
@@ -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;x<AST_IAX_MAX_CALLS;x++)
+               if (iaxs[x])
+                       iax_destroy(x);
+       ast_manager_unregister( "IAXpeers" );
+       ast_cli_unregister(&cli_show_users);
+       ast_cli_unregister(&cli_show_channels);
+       ast_cli_unregister(&cli_show_peers);
+       ast_cli_unregister(&cli_set_jitter);
+       ast_cli_unregister(&cli_show_stats);
+       ast_cli_unregister(&cli_show_cache);
+       ast_unregister_switch(&iax_switch);
+       delete_users();
+       return 0;
+}
+
+int unload_module()
+{
+       return __unload_module();
+}
+
 int load_module(void)
 {
        char *config = "iax.conf";
@@ -5379,7 +5406,7 @@ int load_module(void)
 
        if (ast_channel_register(type, tdesc, iax_capability, iax_request)) {
                ast_log(LOG_ERROR, "Unable to register channel class %s\n", type);
-               unload_module();
+               __unload_module();
                return -1;
        }
 
@@ -5426,28 +5453,6 @@ char *description()
        return desc;
 }
 
-int unload_module()
-{
-       int x;
-       /* Cancel the network thread, close the net socket */
-       pthread_cancel(netthreadid);
-       pthread_join(netthreadid, NULL);
-       close(netsocket);
-       for (x=0;x<AST_IAX_MAX_CALLS;x++)
-               if (iaxs[x])
-                       iax_destroy(x);
-       ast_manager_unregister( "IAXpeers" );
-       ast_cli_unregister(&cli_show_users);
-       ast_cli_unregister(&cli_show_channels);
-       ast_cli_unregister(&cli_show_peers);
-       ast_cli_unregister(&cli_set_jitter);
-       ast_cli_unregister(&cli_show_stats);
-       ast_cli_unregister(&cli_show_cache);
-       ast_unregister_switch(&iax_switch);
-       delete_users();
-       return 0;
-}
-
 int usecount()
 {
        int res;
index e778716..9273d52 100755 (executable)
@@ -5986,6 +5986,33 @@ static struct ast_switch iax2_switch =
        matchmore:              iax2_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;x<IAX_MAX_CALLS;x++)
+               if (iaxs[x])
+                       iax2_destroy(x);
+       ast_manager_unregister( "IAXpeers" );
+       ast_cli_unregister(&cli_show_users);
+       ast_cli_unregister(&cli_show_channels);
+       ast_cli_unregister(&cli_show_peers);
+       ast_cli_unregister(&cli_set_jitter);
+       ast_cli_unregister(&cli_show_stats);
+       ast_cli_unregister(&cli_show_cache);
+       ast_unregister_switch(&iax2_switch);
+       delete_users();
+       return 0;
+}
+
+int unload_module()
+{
+       return __unload_module();
+}
+
 int load_module(void)
 {
        char *config = "iax.conf";
@@ -6048,7 +6075,7 @@ int load_module(void)
 
        if (ast_channel_register(type, tdesc, iax2_capability, iax2_request)) {
                ast_log(LOG_ERROR, "Unable to register channel class %s\n", type);
-               unload_module();
+               __unload_module();
                return -1;
        }
 
@@ -6095,28 +6122,6 @@ char *description()
        return desc;
 }
 
-int unload_module()
-{
-       int x;
-       /* Cancel the network thread, close the net socket */
-       pthread_cancel(netthreadid);
-       pthread_join(netthreadid, NULL);
-       close(netsocket);
-       for (x=0;x<IAX_MAX_CALLS;x++)
-               if (iaxs[x])
-                       iax2_destroy(x);
-       ast_manager_unregister( "IAXpeers" );
-       ast_cli_unregister(&cli_show_users);
-       ast_cli_unregister(&cli_show_channels);
-       ast_cli_unregister(&cli_show_peers);
-       ast_cli_unregister(&cli_set_jitter);
-       ast_cli_unregister(&cli_show_stats);
-       ast_cli_unregister(&cli_show_cache);
-       ast_unregister_switch(&iax2_switch);
-       delete_users();
-       return 0;
-}
-
 int usecount()
 {
        int res;
index 1da77d3..48571af 100755 (executable)
@@ -840,6 +840,64 @@ static unsigned int get_group(char *s)
        return group;
 }
 
+static int __unload_module(void)
+{
+       struct ast_modem_pvt *p, *pl;
+       /* First, take us out of the channel loop */
+       ast_channel_unregister(type);
+       if (!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);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+       if (!ast_mutex_lock(&monlock)) {
+               if (monitor_thread != (pthread_t) -1 && monitor_thread != (pthread_t) -2) {
+                       pthread_cancel(monitor_thread);
+                       pthread_join(monitor_thread, NULL);
+               }
+               monitor_thread = (pthread_t) -2;
+               ast_mutex_unlock(&monlock);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+
+       if (!ast_mutex_lock(&iflock)) {
+               /* Destroy all the interfaces and free their memory */
+               p = iflist;
+               while(p) {
+                       /* Close the socket, assuming it's real */
+                       if (p->fd > -1)
+                               close(p->fd);
+                       pl = p;
+                       p = p->next;
+                       /* Free associated memory */
+                       free(pl);
+               }
+               iflist = NULL;
+               ast_mutex_unlock(&iflock);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+               
+       return 0;
+}
+
+int unload_module()
+{
+       return __unload_module();
+}
+
 int load_module()
 {
        struct ast_config *cfg;
@@ -871,7 +929,7 @@ int load_module()
                                        ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value);
                                        ast_destroy(cfg);
                                        ast_mutex_unlock(&iflock);
-                                       unload_module();
+                                       __unload_module();
                                        return -1;
                                }
                } else if (!strcasecmp(v->name, "driver")) {
@@ -883,7 +941,7 @@ int load_module()
                                ast_log(LOG_ERROR, "Failed to load driver %s\n", driver);
                                ast_destroy(cfg);
                                ast_mutex_unlock(&iflock);
-                               unload_module();
+                               __unload_module();
                                return -1;
                        }
                } else if (!strcasecmp(v->name, "mode")) {
@@ -921,7 +979,7 @@ int load_module()
                                                AST_FORMAT_SLINEAR, modem_request)) {
                ast_log(LOG_ERROR, "Unable to register channel class %s\n", type);
                ast_destroy(cfg);
-               unload_module();
+               __unload_module();
                return -1;
        }
        ast_destroy(cfg);
@@ -930,59 +988,6 @@ int load_module()
        return 0;
 }
 
-int unload_module()
-{
-       struct ast_modem_pvt *p, *pl;
-       /* First, take us out of the channel loop */
-       ast_channel_unregister(type);
-       if (!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);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-       if (!ast_mutex_lock(&monlock)) {
-               if (monitor_thread != (pthread_t) -1 && monitor_thread != (pthread_t) -2) {
-                       pthread_cancel(monitor_thread);
-                       pthread_join(monitor_thread, NULL);
-               }
-               monitor_thread = (pthread_t) -2;
-               ast_mutex_unlock(&monlock);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-
-       if (!ast_mutex_lock(&iflock)) {
-               /* Destroy all the interfaces and free their memory */
-               p = iflist;
-               while(p) {
-                       /* Close the socket, assuming it's real */
-                       if (p->fd > -1)
-                               close(p->fd);
-                       pl = p;
-                       p = p->next;
-                       /* Free associated memory */
-                       free(pl);
-               }
-               iflist = NULL;
-               ast_mutex_unlock(&iflock);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-               
-       return 0;
-}
-
 int usecount(void)
 {
        int res;
index 0cf50f5..cd40ce1 100755 (executable)
@@ -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;
index 64b2413..7757348 100755 (executable)
@@ -1051,6 +1051,64 @@ static int parse_gain_value(char *gain_type, char *value)
        return (int)gain;
 }
 
+static int __unload_module(void)
+{
+       struct phone_pvt *p, *pl;
+       /* First, take us out of the channel loop */
+       ast_channel_unregister(type);
+       if (!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);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+       if (!ast_mutex_lock(&monlock)) {
+               if (monitor_thread > -1) {
+                       pthread_cancel(monitor_thread);
+                       pthread_join(monitor_thread, NULL);
+               }
+               monitor_thread = -2;
+               ast_mutex_unlock(&monlock);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+
+       if (!ast_mutex_lock(&iflock)) {
+               /* Destroy all the interfaces and free their memory */
+               p = iflist;
+               while(p) {
+                       /* Close the socket, assuming it's real */
+                       if (p->fd > -1)
+                               close(p->fd);
+                       pl = p;
+                       p = p->next;
+                       /* Free associated memory */
+                       free(pl);
+               }
+               iflist = NULL;
+               ast_mutex_unlock(&iflock);
+       } else {
+               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+               return -1;
+       }
+               
+       return 0;
+}
+
+int unload_module(void)
+{
+       return __unload_module();
+}
+
 int load_module()
 {
        struct ast_config *cfg;
@@ -1083,7 +1141,7 @@ int load_module()
                                        ast_log(LOG_ERROR, "Unable to register channel '%s'\n", v->value);
                                        ast_destroy(cfg);
                                        ast_mutex_unlock(&iflock);
-                                       unload_module();
+                                       __unload_module();
                                        return -1;
                                }
                } else if (!strcasecmp(v->name, "silencesupression")) {
@@ -1136,7 +1194,7 @@ int load_module()
                         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();
+               __unload_module();
                return -1;
        }
        ast_destroy(cfg);
@@ -1145,61 +1203,6 @@ int load_module()
        return 0;
 }
 
-
-
-int unload_module()
-{
-       struct phone_pvt *p, *pl;
-       /* First, take us out of the channel loop */
-       ast_channel_unregister(type);
-       if (!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);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-       if (!ast_mutex_lock(&monlock)) {
-               if (monitor_thread > -1) {
-                       pthread_cancel(monitor_thread);
-                       pthread_join(monitor_thread, NULL);
-               }
-               monitor_thread = -2;
-               ast_mutex_unlock(&monlock);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-
-       if (!ast_mutex_lock(&iflock)) {
-               /* Destroy all the interfaces and free their memory */
-               p = iflist;
-               while(p) {
-                       /* Close the socket, assuming it's real */
-                       if (p->fd > -1)
-                               close(p->fd);
-                       pl = p;
-                       p = p->next;
-                       /* Free associated memory */
-                       free(pl);
-               }
-               iflist = NULL;
-               ast_mutex_unlock(&iflock);
-       } else {
-               ast_log(LOG_WARNING, "Unable to lock the monitor\n");
-               return -1;
-       }
-               
-       return 0;
-}
-
 int usecount()
 {
        int res;
index 37d8a1f..289e101 100755 (executable)
@@ -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;
index d4aee06..b2a54d3 100755 (executable)
@@ -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;
index e366dc5..ffeedc1 100755 (executable)
@@ -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