aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-21 21:52:33 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-21 21:52:33 +0000
commit0590d86b75aa6e0649f21b3e37244e9485ee5dbd (patch)
treeee5f46db97d25597eb3f2585012f59210a783d91 /apps
parent60672646fbf982e6cc9d86e0b6957e8c15b74909 (diff)
Merged revisions 213697 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r213697 | kpfleming | 2009-08-21 16:39:51 -0500 (Fri, 21 Aug 2009) | 12 lines Ensure that realtime mailboxes properly report status on subscription. This patch modifies app_voicemail's response to mailbox status subscriptions (via the internal event system) to ensure that a subscription triggers an explicit poll of the mailbox, so the subscriber can get an immediate cached event with that status. Previously, the cache was only populated with the status of non-realtime mailboxes. (closes issue #15717) Reported by: natmlt ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@213699 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_voicemail.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 4e979a4ad..2c8066ebe 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -9937,24 +9937,28 @@ static struct ast_cli_entry cli_voicemail[] = {
AST_CLI_DEFINE(handle_voicemail_reload, "Reload voicemail configuration"),
};
+static void poll_subscribed_mailbox(struct mwi_sub *mwi_sub)
+{
+ int new = 0, old = 0, urgent = 0;
+
+ inboxcount2(mwi_sub->mailbox, &urgent, &new, &old);
+
+ if (urgent != mwi_sub->old_urgent || new != mwi_sub->old_new || old != mwi_sub->old_old) {
+ mwi_sub->old_urgent = urgent;
+ mwi_sub->old_new = new;
+ mwi_sub->old_old = old;
+ queue_mwi_event(mwi_sub->mailbox, urgent, new, old);
+ }
+}
+
static void poll_subscribed_mailboxes(void)
{
struct mwi_sub *mwi_sub;
AST_RWLIST_RDLOCK(&mwi_subs);
AST_RWLIST_TRAVERSE(&mwi_subs, mwi_sub, entry) {
- int new = 0, old = 0, urgent = 0;
-
- if (ast_strlen_zero(mwi_sub->mailbox))
- continue;
-
- inboxcount2(mwi_sub->mailbox, &urgent, &new, &old);
-
- if (urgent != mwi_sub->old_urgent || new != mwi_sub->old_new || old != mwi_sub->old_old) {
- mwi_sub->old_urgent = urgent;
- mwi_sub->old_new = new;
- mwi_sub->old_old = old;
- queue_mwi_event(mwi_sub->mailbox, urgent, new, old);
+ if (!ast_strlen_zero(mwi_sub->mailbox)) {
+ poll_subscribed_mailbox(mwi_sub);
}
}
AST_RWLIST_UNLOCK(&mwi_subs);
@@ -10040,7 +10044,8 @@ static int handle_subscribe(void *datap)
AST_RWLIST_UNLOCK(&mwi_subs);
ast_free((void *) p->mailbox);
ast_free((void *) p->context);
- ast_free(p);
+ ast_free(p);
+ poll_subscribed_mailbox(mwi_sub);
return 0;
}