On Monday 16 August 2010, Jasmin Schnatterbeck wrote:
The issue is visible, whenever pua_dialoginfo sends
out a PUBLISH
request. During that process, build_cell is called, which destroys avps.
I experimented with adding a parameter. It works - nearly.
PUBLISH is sent out, avps are OK, but after additional 2-3 seconds, one
child process dies.
Hello Jasmin,
i think this happens probably because of the reasons Andrei mentioned in his
reply (last wednesday) - that an internal AVP list cannout be shared between
several transactions.
So there are these 2 possibilities:
- AVPs get destroyed
- kamailio dies a few seconds after sending out the PUBLISH
Which scenario happens depends on these lines in build_cell() (tm
h_table.c:~300):
old = set_avp_list(AVP_TRACK_FROM | AVP_CLASS_URI,
[..]
*old = 0;
If these lines are present, AVPS get destroyed. If not, kamailio child
dies a few seconds after sending out PUBLISH.
I tried different things here, but I did not figure out yet, why this
happens.
I assume that somewhere (may through a timer) somewhat is called, which
uses the parameters of the cell, which refer to avps. And if there is no
AVP list (but e.g. a 0 pointer), the child processing this code dies.
There is a delete timer for transaction which does some cleanup, maybe in a
way like you described here.
So I would like to ask Andrei, whether if it is
possible to investigate
this problem - because at this moment, it makes the use of
pua_dialoginfo totally impossible.
There are tow two other workarounds, but both are not really good or
practical:
* changing your proxy that it not keep transaction state
* changing pua_dialoginfo that it not send its PUBLISH transactional
So i think the best way to proceed is doing a change in TM like Andrei
suggested, changing the code that it not copy the AVP list for a local
transaction and instead create one with an empty AVP list.
Cheers,
Henning