[asterisk-ss7] libss7 BLO / BLA issues (audio loss, call drop, asterisk hangs)

Kaloyan Kovachev kkovachev at varna.net
Thu Feb 14 09:10:54 CST 2013


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)




More information about the asterisk-ss7 mailing list