]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: ftmod_libpri - Do not unlock the channel until all states pending
authorMoises Silva <moy@sangoma.com>
Wed, 24 Nov 2010 17:30:58 +0000 (12:30 -0500)
committerMoises Silva <moy@sangoma.com>
Wed, 24 Nov 2010 17:30:58 +0000 (12:30 -0500)
                        have been cleared. This should fix issues with
                        state transitions being ignored.

libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c

index 669e85218aa50aa2aa5802137404bb50b939bfa1..cf84dbeebde8e33535f8ab9da60c2c07df262b9a 100644 (file)
@@ -727,15 +727,13 @@ static __inline__ void check_state(ftdm_span_t *span)
                for (j = 1; j <= ftdm_span_get_chan_count(span); j++) {
                        ftdm_channel_t *chan = ftdm_span_get_channel(span, j);
 
-                       if (ftdm_test_flag(chan, FTDM_CHANNEL_STATE_CHANGE)) {
-                               ftdm_channel_lock(chan);
-
+                       ftdm_channel_lock(chan);
+                       while (ftdm_test_flag(chan, FTDM_CHANNEL_STATE_CHANGE)) {
                                ftdm_clear_flag(chan, FTDM_CHANNEL_STATE_CHANGE);
                                state_advance(chan);
                                ftdm_channel_complete_state(chan);
-
-                               ftdm_channel_unlock(chan);
                        }
+                       ftdm_channel_unlock(chan);
                }
        }
 }