[Devel] Re: TM failure route bug

Klaus Darilion klaus.mailinglists at pernau.at
Wed Oct 19 20:47:27 CEST 2005


Hi Bogdan!

Thanks for the fix! No crashes yet :-)

regards
klaus


Bogdan-Andrei Iancu wrote:
> Hi everybody,
> 
> thanks to the help from Klaus, we manage to hunt down one of the 
> remaining bugs. It was reported as a random crash when executing failure 
> route for CANCEL requests.
> 
> I found rather interesting the scenario and what was happening inside 
> OpenSER, so, here is the short-version story - basically a story about 
> an INVITE and its CANCEL:
>    1) a fast CANCEL happens and the CANCEL is processed by the proxy 
> prior to INVITE. So, no INVITE is matched by CANCEL.
>    2) CANCEL is is just forwarded statefully without any other info 
> regarding the INVITE
>    3) the INVITE is finally processed and, without any knowledge of 
> CANCEL, it's statefully forwarded.
>    4) the destination for both CANCEL and INVITE (the same) does not 
> reply at all
>    5) final response timer (FR) hits for CANCEL and triggers the sending 
> of 408 for CANCEL
>    6) 408 reply triggers failure route execution for CANCEL
>    7) t_relay() called in failure route for CANCEL looks again for the 
> corresponding INVITE (if any) and this time actually finds one
>    8) as the found INVITE transaction still has a pending branch (the 
> initial forward) which haven't received any reply, it's trigger the 
> sending of "487 Request Terminated" reply for the INVITE
>    9) 487 reply triggers failure route execution for INVITE. But 
> STOP!!!!! we are already in another failure route execution for CANCEL 
> reply (step 6). So we get to have nested failure route execution!!!!!!
> 
> 
> The problem is that failure route execution wasn't design for nested 
> calls as it relays on static variables to backup vital informations 
> regarding the TM environment and request.
> 
> And here is the crash :(.
> 
> I did a fast fixup in TM : failure route execution uses a stack to 
> backup the info (instead of static variables). This will allow normal 
> processing of this scenario.
> This fixup is not the best: as previously talked with Klaus, the normal 
> behaviour would be that on step 2, when the INVITE is processes, to 
> detect the presence of the CANCEL and to stop any relay for INVITE. But 
> this is more complex and I prefer to do it after the release.
> 
> Again, many thanks to Klaus for help in testing  ;)
> 
> 
> regards,
> bogdan
> 
> 




More information about the Devel mailing list