On Thu, 07 Feb 2013 11:30:22 +0200, Kaloyan Kovachev <kkovachev at varna.net> wrote: > Hi, > it seems i've messed that at some point, because it was something that > was tested and working. I will have to resurrect my test setup in order to > fix it and update reviews 2150 and 2170, but unfortunately it will not > happen in the next few weeks probably. > > On Wed, 06 Feb 2013 04:13:03 +0100, Michal Ryb?rik <michal at rybarik.sk> > wrote: >> Hi, >> >> I have a strange issues with BLO / BLA functionality... Could somebody >> be so kind and check it, where's the problem? >> >> libss7-trunk (r320), with asterisk-trunk-r372092 with SS7-27 patches.. >> the same applies also to svn /team/rmudgett/ss7_27_knk >> (r380912M-/trunk).... >> >> >> make call from SPC 1 -> to SPC 2, answer at SPC 2 >> now block this CIC or linkset, at SPC 1 (call origination side) >> - call audio is stopped (should not be) >> - call cannot be cleared (REL is retransmitting) >> - SPC 1 remains OK, will connect another calls >> - SCP 2 becomes totally unusable... one way audio at next call, not >> connecting other calls at all, "core restart now" hangs.... requires >> kill -9 `pidof asterisk` to resume operation >> > > smells to deadlock when BLO is received at SPC 2 ... after a quick look at > the code i may suggest to change: > > sig_ss7_lock_owner(linkset, chanpos); > if (!p->owner) { > p->ss7call = isup_free_call_if_clear(ss7, e->blo.call); > } else if (e->blo.got_sent_msg & ISUP_SENT_IAM) { > /* Q.784 6.2.2 */ > ast_channel_hangupcause_set(p->owner, SS7_CAUSE_TRY_AGAIN); > ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV); > ast_channel_unlock(p->owner); > } > > to the following: > > sig_ss7_lock_owner(linkset, chanpos); > if (!p->owner) { > p->ss7call = isup_free_call_if_clear(ss7, e->blo.call); > } else { > if (e->blo.got_sent_msg & ISUP_SENT_IAM) { > /* Q.784 6.2.2 */ > ast_channel_hangupcause_set(p->owner, SS7_CAUSE_TRY_AGAIN); > ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV); Actualy here is the problem - we should not hangup the call, but only mark it to try again. This last line should be removed. There is also another problem that even if marked with SS7_CAUSE_TRY_AGAIN the call is not retried, which i will need to investigate further. > } > ast_channel_unlock(p->owner); > } > I will upload the latest version of the patches on the reviewboard and also against asterisk 11 on jira (https://issues.asterisk.org/jira/browse/SS7-27)