diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_voicemail.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 59e751c4d..97e26f66c 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -372,6 +372,7 @@ struct vm_state { int starting; int repeats; #ifdef IMAP_STORAGE + ast_mutex_t lock; int updated; /* decremented on each mail check until 1 -allows delay */ long msgArray[256]; MAILSTREAM *mailstream; @@ -4781,7 +4782,9 @@ static int init_mailstream(struct vm_state *vms, int box) #endif /* Connect to INBOX first to get folders delimiter */ imap_mailbox_name(tmp, sizeof(tmp), vms, 0, 1); + ast_mutex_lock(&vms->lock); stream = mail_open (stream, tmp, debug ? OP_DEBUG : NIL); + ast_mutex_unlock(&vms->lock); if (stream == NIL) { ast_log (LOG_ERROR, "Can't connect to imap server %s\n", tmp); return -1; @@ -4796,7 +4799,9 @@ static int init_mailstream(struct vm_state *vms, int box) imap_mailbox_name(tmp, sizeof(tmp), vms, box, 1); if (option_debug > 2) ast_log (LOG_DEBUG,"Before mail_open, server: %s, box:%d\n", tmp, box); + ast_mutex_lock(&vms->lock); vms->mailstream = mail_open (stream, tmp, debug ? OP_DEBUG : NIL); + ast_mutex_unlock(&vms->lock); if (vms->mailstream == NIL) { return -1; } else { @@ -9026,6 +9031,7 @@ static void vmstate_delete(struct vm_state *vms) if (!vf) { ast_log(LOG_ERROR, "No vmstate found for user:%s, mailbox %s\n",vms->imapuser,vms->username); } else { + ast_mutex_destroy(&vms->lock); free(vf); } ast_mutex_unlock(&vmstate_lock); @@ -9057,6 +9063,7 @@ static void init_vm_state(struct vm_state *vms) for (x = 0; x < 256; x++) { vms->msgArray[x] = 0; } + ast_mutex_init(&vms->lock); } static void check_msgArray(struct vm_state *vms) |