Hi Andrew,
I went thru your report and it is quite odd why you get so short expire
time when calculating based on fr_timer. Especially if you say the 180
is quite fast.
As you are able to reproduce the issue, could you print (before line
295) the `t->uac[branch].request.fr_timer.time_out` and `get_ticks()`
values ?
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
https://www.opensips-solutions.com
https://www.siphub.com
On 23.01.2026 05:49, Andrew Yager wrote:
Hi Bogdan,
Just wondering if you've had a chance to look at this? We're at a week
of this fix working well with no ill observed side effects; so I'm
pretty happy that this is a solution, but I need to work out whether I
want to compile my own apt package for this module to pin my changes :)
Thanks,
Andrew
On Fri, 16 Jan 2026 at 23:44, Bogdan-Andrei Iancu
<[email protected]> wrote:
Hi Andrew,
Thanks for the analysis and the detailed explanations. Let me
review in
the next days and come back to you
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
https://www.opensips-solutions.com
https://www.siphub.com
On 16.01.2026 12:08, Andrew Yager wrote:
> Hi,
>
> Following up on my last BLF getting stuck on "early/ringing" state
> after calls end, the cause of the bug I thought was wrong. But I
have
> found the cause and have a proposed fix, but I have some questions
> about the timer behavior that I'd appreciate input on.
>
> When pua_dialoginfo publishes dialog state via the TM callback (for
> 180 Ringing responses), it calculates the presence record
lifetime as:
>
> expire = t->uac[branch].request.fr_timer.time_out -
get_ticks();
>
> In our environment (OpenSIPS 3.4.16, mid-registrar config,
> fr_timeout=30, fr_inv_timeout=180), this was returning values as low
> as 1 second, causing the presence record to expire before the dialog
> callback could update it with "confirmed" or "terminated"
states. This
> leaves orphan "early" presence records that cause BLF to remain
stuck.
>
> I've tested a fix that replaces the FR timer calculation with
> DEFAULT_CREATED_LIFETIME (3600 seconds) at lines 269 and 295 in
> pua_dialoginfo.c. This aligns the TM callback with the dialog
> callback, which already uses dlg->lifetime for CONFIRMED/TERMINATED
> states. The fix works - I've verified it by applying the fix,
> reverting to original code (bug returns), and re-applying the fix
> (works again).
>
> I'v re-submitted the bug report for this at
> https://github.com/OpenSIPS/opensips/issues/3802 but what I don't
> fully understand is why the FR timer remainder is so short in the
> first place. With fr_timeout=30, I'd expect around 29 seconds
> remaining if 180 Ringing arrives within a second of the INVITE.
> Instead we're seeing around 1 second. I'm wondering if this is
related
> to mid-registrar mode having multiple transactions, or perhaps the
> timer is in some transitional state when the callback reads it.
>
> Does anyone know if there was a specific reason for using the FR
timer
> remainder as the presence lifetime? And in mid-registrar
> configurations, which transaction's timer is actually being
referenced
> here?
>
> Happy to submit a PR with the fix, but wanted to check if I'm
missing
> something about the original design first.
>
> Thanks,
> Andrew
>
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users