Skip to content
Snippets Groups Projects
Commit 53b7df82 authored by Alexei Gradinari's avatar Alexei Gradinari
Browse files

app_voicemail: IMAP logout on reload/unload

Closing IMAP connection on module reload or unload.

ASTERISK-24052 #close

Change-Id: I2a40182aa9ef249fa6865d33570430e9ada68525
parent b1f46c2a
No related branches found
No related tags found
No related merge requests found
...@@ -13134,10 +13134,25 @@ static void imap_logout(const char *mailbox_id) ...@@ -13134,10 +13134,25 @@ static void imap_logout(const char *mailbox_id)
return; return;
} }
   
ast_mutex_lock(&vms->lock);
vms->mailstream = mail_close(vms->mailstream); vms->mailstream = mail_close(vms->mailstream);
ast_mutex_unlock(&vms->lock);
vmstate_delete(vms); vmstate_delete(vms);
} }
   
static void imap_close_subscribed_mailboxes(void)
{
struct mwi_sub *mwi_sub;
AST_RWLIST_RDLOCK(&mwi_subs);
AST_RWLIST_TRAVERSE(&mwi_subs, mwi_sub, entry) {
if (!ast_strlen_zero(mwi_sub->mailbox)) {
imap_logout(mwi_sub->mailbox);
}
}
AST_RWLIST_UNLOCK(&mwi_subs);
}
#endif #endif
   
static int handle_unsubscribe(void *datap) static int handle_unsubscribe(void *datap)
...@@ -13591,7 +13606,11 @@ static int actual_load_config(int reload, struct ast_config *cfg, struct ast_con ...@@ -13591,7 +13606,11 @@ static int actual_load_config(int reload, struct ast_config *cfg, struct ast_con
strcpy(listen_control_restart_key, DEFAULT_LISTEN_CONTROL_RESTART_KEY); strcpy(listen_control_restart_key, DEFAULT_LISTEN_CONTROL_RESTART_KEY);
strcpy(listen_control_stop_key, DEFAULT_LISTEN_CONTROL_STOP_KEY); strcpy(listen_control_stop_key, DEFAULT_LISTEN_CONTROL_STOP_KEY);
   
/* Free all the users structure */ #ifdef IMAP_STORAGE
imap_close_subscribed_mailboxes();
#endif
/* Free all the users structure */
free_vm_users(); free_vm_users();
   
/* Free all the zones structure */ /* Free all the zones structure */
...@@ -14985,6 +15004,9 @@ static int unload_module(void) ...@@ -14985,6 +15004,9 @@ static int unload_module(void)
ast_unload_realtime("voicemail"); ast_unload_realtime("voicemail");
ast_unload_realtime("voicemail_data"); ast_unload_realtime("voicemail_data");
   
#ifdef IMAP_STORAGE
imap_close_subscribed_mailboxes();
#endif
free_vm_users(); free_vm_users();
free_vm_zones(); free_vm_zones();
return res; return res;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment