Cleanup fsk spill if off hook is detected during mwi spill.
authorDoug Bailey <dbailey@digium.com>
Wed, 7 Jan 2009 17:05:37 +0000 (17:05 +0000)
committerDoug Bailey <dbailey@digium.com>
Wed, 7 Jan 2009 17:05:37 +0000 (17:05 +0000)
Correct logic error in handling events when sending mwi spill
(closes issue #14143)
Reported by: alecdavis
Patches:
      chan_dahdi.handle_init_event2.diff.txt uploaded by dbailey

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@167416 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index 218d550..043f1a1 100644 (file)
@@ -7824,6 +7824,17 @@ static int mwi_send_process_event(struct dahdi_pvt * pvt, int event)
                                }
                        }
                        break;
+               /* Going off hook, I need to punt this spill */
+               case DAHDI_EVENT_RINGOFFHOOK:
+                       if (pvt->cidspill) {
+                               ast_free(pvt->cidspill);
+                               pvt->cidspill = NULL;
+                               pvt->cidpos = 0; 
+                               pvt->cidlen = 0;
+                       }
+                       pvt->mwisend_data.mwisend_current = MWI_SEND_DONE;
+                       pvt->mwisendactive = 0;
+                       break;
                case DAHDI_EVENT_RINGERON:
                case DAHDI_EVENT_HOOKCOMPLETE:
                        break;
@@ -8271,7 +8282,7 @@ static void *do_monitor(void *data)
                                        ast_debug(1, "Monitor doohicky got event %s on channel %d\n", event2str(res), i->channel);
                                        /* Don't hold iflock while handling init events */
                                        ast_mutex_unlock(&iflock);
-                                       if (0 == i->mwisendactive || 0 != mwi_send_process_event(i, res)) {
+                                       if (0 == i->mwisendactive || 0 == mwi_send_process_event(i, res)) {
                                                handle_init_event(i, res);
                                        }
                                        ast_mutex_lock(&iflock);