]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: fixing a potential crash on a rarely happened situation
authorJames Zhang <jzhang@sangoma.com>
Thu, 15 Mar 2012 22:05:47 +0000 (18:05 -0400)
committerJames Zhang <jzhang@sangoma.com>
Thu, 15 Mar 2012 22:05:47 +0000 (18:05 -0400)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c

index cb5584760f53a71528ca3042c47ced3c0e0ca654..60b44cec1eb92b12146232f4c871cb6654b167c6 100644 (file)
@@ -1314,6 +1314,10 @@ static ftdm_status_t handle_show_status(ftdm_stream_handle_t *stream, int span,
                                                }else {
                                                        stream->write_function(stream, "relay=N");
                                                }
+
+#ifdef SMG_RELAY_DBG
+                                               stream->write_function(stream, "| flag=0x%llx", ftdmchan->flags);
+#endif
                                        }
                
 #ifdef SMG_RELAY_DBG
index fa36c7280a54e770905116f86c3cf0485a101f2c..ecd83a14d46db577a5b74840791d3bae34026294 100644 (file)
@@ -614,20 +614,22 @@ static void ftdm_sangoma_ss7_process_stack_event (sngss7_event_data_t *sngss7_ev
                        break;
                case SNGSS7_REL_CFM_EVENT:
                        {
-                               ftdm_channel_t *peer_chan = sngss7_info->peer_data->ftdmchan;
-                               ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DOWN);
-                               if (peer_chan) {
-                                       /* we need to unlock our chan or we risk deadlock */
-                                       ftdm_channel_advance_states(ftdmchan);
-                                       ftdm_channel_unlock(ftdmchan);
-
-                                       ftdm_channel_lock(peer_chan);
-                                       if (peer_chan->state != FTDM_CHANNEL_STATE_DOWN) {
-                                               ftdm_set_state(peer_chan, FTDM_CHANNEL_STATE_DOWN);
-                                       }
-                                       ftdm_channel_unlock(peer_chan);
+                               if (sngss7_info->peer_data) {
+                                       ftdm_channel_t *peer_chan = sngss7_info->peer_data->ftdmchan;
+                                       ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DOWN);
+                                       if (peer_chan) {
+                                               /* we need to unlock our chan or we risk deadlock */
+                                               ftdm_channel_advance_states(ftdmchan);
+                                               ftdm_channel_unlock(ftdmchan);
+
+                                               ftdm_channel_lock(peer_chan);
+                                               if (peer_chan->state != FTDM_CHANNEL_STATE_DOWN) {
+                                                       ftdm_set_state(peer_chan, FTDM_CHANNEL_STATE_DOWN);
+                                               }
+                                               ftdm_channel_unlock(peer_chan);
 
-                                       ftdm_channel_lock(ftdmchan);
+                                               ftdm_channel_lock(ftdmchan);
+                                       }
                                }
                        }
                        break;