I'm working on a SIP SUBSCRIBE/NOTIFY server using Sofia-SIP 1.12.11. It is 
running on an isolated system which synchronises time from satellites. When the 
time is obtained, and the system time jumps (e.g. from Unix time value 200 to 
Unix time value 1402307300), then the program aborts with an assertion:

sip-server: nta.c:1280: agent_timer: Assertion 
`!agent->sa_in.completed->q_head' failed.
Aborted

It looks as though agent_timer() in nta.c is written with an implicit 
requirement that the system time doesn't jump. It is deriving a wrapping signed 
32-bit millisecond timer value from the system time. If the system time jumps 
suddenly, then that may trigger the assert. I'm not sure exactly what time 
values will trigger it. It looks as though it should happen if the millisecond 
timer changes by roughly 2³¹ or more, but my test data isn't conclusive.

What is a good way to resolve this?

Ideally, it would be good if Sofia-SIP would use a monotonically increasing 
timer instead, using the su_monotime() function. I'm not sure how major a 
change this is, and whether it would be accepted into the Sofia-SIP project 
(where is the "official" repository for Sofia-SIP development now?).

If system time is used, then firstly the assert should be avoided. Secondly, 
there is a question of whether time delays can be accurately preserved, or 
whether time delays may trigger prematurely.

Regards,
Craig McQueen

------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Sofia-sip-devel mailing list
Sofia-sip-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel

Reply via email to