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

Kaloyan Kovachev kkovachev at varna.net
Thu Feb 7 03:30:22 CST 2013


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);
	}
	ast_channel_unlock(p->owner);
}

most likely this will fix the problem, but if there is something more i
will need to learn some resurrection spells first :)

> make the same call from SPC 1 to SPC 2, answer at SPC2
> but now block this CIC or linkset at the opposite side, at SPC 2 (call 
> termination side)
> - call is dropped (should not be)
> - SPC 1 remains OK, will connect another calls
> - SCP 2 also remains OK.....
> 
> good way to check if asterisk already hanged
> # asterisk -rx 'ss7 show channels'
> if hanged, this output hangs too, just on the CIC with broken (blocked) 
> call...
> 
> Any help would be appreciated....
> 
> Thanks,
> M.R.
> 
> 
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
> 
> asterisk-ss7 mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-ss7



More information about the asterisk-ss7 mailing list