summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorAlec L Davis <sivad.a@paradise.net.nz>2011-04-01 07:43:00 +0000
committerAlec L Davis <sivad.a@paradise.net.nz>2011-04-01 07:43:00 +0000
commitd07fb85bb8c88d5b58d80e1906099912a40b7686 (patch)
tree8290795ef9801aa276bbcbe2dbf956bf32a575d4 /apps
parentee44bf7257af868d701da6a8144e8e54980a0578 (diff)
Merged revisions 312117 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r312117 | alecdavis | 2011-04-01 20:32:12 +1300 (Fri, 01 Apr 2011) | 29 lines Merged revisions 312103 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r312103 | alecdavis | 2011-04-01 20:25:54 +1300 (Fri, 01 Apr 2011) | 22 lines Merged revisions 312070 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r312070 | alecdavis | 2011-04-01 19:46:56 +1300 (Fri, 01 Apr 2011) | 16 lines app_voicemail: close_mailbox needs to respect additional messages while mailbox is open. close_mailbox leave gaps in message sequence if messages are deleted and new messages arrive during this time, this is because the shuffle down to slot 0, only shuffles the number of pre-existing messages when mailbox is opened, ignoring new arrivals. Fix: in close_mailbox re-evaluate number of messages before the shuffle, this then includes new arrivals. Happens on filebased or ODBC storage. (issues #19032,#18582,#18692,#18998) Reported by: alecdavis,tootai,afosorio Review: https://reviewboard.asterisk.org/r/1153/ ........ ................ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@312118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_voicemail.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index f00d37920..d571ce813 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -7785,7 +7785,9 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box)
static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
{
int x = 0;
+
#ifndef IMAP_STORAGE
+ int last_msg_idx;
int res = 0, nummsg;
char fn2[PATH_MAX];
#endif
@@ -7801,8 +7803,14 @@ static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
return ERROR_LOCK_PATH;
}
+ /* update count as message may have arrived while we've got mailbox open */
+ last_msg_idx = last_message_index(vmu, vms->curdir);
+ if (last_msg_idx != vms->lastmsg) {
+ ast_log(AST_LOG_WARNING, "%d messages received after mailbox opened.\n", last_msg_idx - vms->lastmsg);
+ }
+
/* must check up to last detected message, just in case it is erroneously greater than maxmsg */
- for (x = 0; x < vms->lastmsg + 1; x++) {
+ for (x = 0; x < last_msg_idx + 1; x++) {
if (!vms->deleted[x] && ((strcasecmp(vms->curbox, "INBOX") && strcasecmp(vms->curbox, "Urgent")) || !vms->heard[x] || (vms->heard[x] && !ast_test_flag(vmu, VM_MOVEHEARD)))) {
/* Save this message. It's not in INBOX or hasn't been heard */
make_file(vms->fn, sizeof(vms->fn), vms->curdir, x);