diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 3784b06dec0ee65aca93364a6dcc5a80c3963909..c50b49ab54a377666c24aa4f3ae9715595f2c39b 100755 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -2601,6 +2601,45 @@ static int reload_config(void) return 0; } +void delete_devices(void) +{ + struct skinny_device *d, *dlast; + struct skinny_line *l, *llast; + struct skinny_subchannel *sub, *slast; + + ast_mutex_lock(&devicelock); + + /* Delete all devices */ + for (d=devices;d;) { + + /* Delete all lines for this device */ + for (l=d->lines;l;) { + /* Delete all subchannels for this line */ + for (sub=l->sub;sub;) { + slast = sub; + sub = sub->next; + free(slast); + } + llast = l; + l = l->next; + free(llast); + } + dlast = d; + d = d->next; + free(dlast); + } + devices=NULL; + ast_mutex_unlock(&devicelock); +} + +int reload(void) +{ + delete_devices(); + reload_config(); + restart_monitor(); + return 0; +} + int load_module() {