aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/app_voicemail.c7
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)