<div dir="ltr">Looking for example at the DIALPLAN module, it looks like the same procedure is followed, so I don't see anything special I'm doing here.</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 22, 2015 at 7:22 PM, Mickael Marrache <span dir="ltr"><<a href="mailto:mickaelmarrache@gmail.com" target="_blank">mickaelmarrache@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Razvan,<div><br></div><div>I do the following:</div><div><br></div><div><div>static str my_avp_name = {NULL, 0};</div><div>static pv_spec_t my_avp;</div></div><div><br></div><div><div>static param_export_t params[] = {</div><div><span style="white-space:pre-wrap">        .....</span></div><div><span style="white-space:pre-wrap">        </span>{ "my_avp",<span style="white-space:pre-wrap"> </span>STR_PARAM, &my_avp_name.s}</div><div>};</div></div><div><br></div><div><div>static int mod_init(void) {</div><div> ....</div><div><span style="white-space:pre-wrap">        my</span>_avp_name.len = strlen(my_avp_name.s);</div></div><div> ....</div><div> if(my_avp_name.s == NULL || my_avp_name.len == 0) {</div><div><span style="white-space:pre-wrap">                </span>return -1;</div><div><span style="white-space:pre-wrap">        </span>}</div><div><span style="white-space:pre-wrap">        </span>if (pv_parse_spec(&my_avp_name, &my_avp) == 0 || my_avp.type != PVT_AVP) {</div><div><span style="white-space:pre-wrap">                </span>return -1;</div><div><span style="white-space:pre-wrap">        </span>}</div><div>}</div><div><br></div><div>Then, when I want to set a value to my AVP (for example, for setting an integer):</div><div><br></div><div>pv_value_t pvar_value;<br></div><div><div>pvar_value.flags = PV_VAL_INT|PV_TYPE_INT;</div><div>pvar_value.ri = some_integer;</div><div>if(pv_set_value(msg, &my_avp, (int)EQ_T, &pvar_value) < 0) {</div><div><span style="white-space:pre-wrap">        </span>goto error;</div><div>}</div></div><div><br></div><div>And, that's all. I don't detroy the AVP after use because the module can't know the AVP is not used anymore. I can destroy the AVP in the script after use but I thought it was handled automatically.</div><div><br></div><div>In the example I gave here, is the AVP attached to a transaction? What are the conditions for an AVP to be attached to a transaction?</div><div><br></div><div>Thanks,</div><div>Mickael</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 22, 2015 at 10:33 AM, Răzvan Crainea <span dir="ltr"><<a href="mailto:razvan@opensips.org" target="_blank">razvan@opensips.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<tt>Hi, Mickael!<br>
<br>
Both maps are relevant, because both of them contain id2name
mappings. So you should definitely look into the avp_map too. Note
that those mappings do not store AVPs, they only store the real
name of the AVP, as you use in script, and they can be populated
at startup (in this case they are stored in PKG) and runtime
(stored in SHM).<br>
It depends when the AVP should be destroyed: if they are attached
to the transaction (and they usually are), they are automatically
destroyed by the tm module. Otherwise the module that uses them,
should take care of that.<br>
<br>
Best regards,<br>
</tt><span>
<pre cols="72">Răzvan Crainea
OpenSIPS Solutions
<a href="http://www.opensips-solutions.com" target="_blank">www.opensips-solutions.com</a></pre>
</span><div><div><div>On 06/18/2015 09:56 PM, Mickael
Marrache wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi Razvan,
<div><br>
</div>
<div>I looked at both avp_map and avp_map_shm. In our case, only
avp_map_shm is relevant since the leak appears in shared
memory. I only see 4 elements in this map while I can see a
lot of remaining AVPs when looking at the memory dump created
at shutdown using QM debug. Therefore, it looks like these
AVPs are not in the map. Looking at the new_avp function in
usr_avp.c, I don't see at any moment that an entry is added to
the map for the new AVP.</div>
<div><br>
</div>
<div>
<div>(gdb) print avp_map_shm->avl_count</div>
<div>$5 = 4</div>
<div>(gdb) print avp_map->avl_count</div>
<div>$6 = 140</div>
</div>
<div><br>
</div>
<div>Any idea?</div>
<div><br>
</div>
<div>At which moment during execution an AVP is destroyed? Is it
required for modules returning values to script through AVPs
to destroy these AVPs? or are they automatically destroyed?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Mickael</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, Jun 18, 2015 at 7:33 PM, Răzvan
Crainea <span dir="ltr"><<a href="mailto:razvan@opensips.org" target="_blank">razvan@opensips.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> <tt><span>Hi,
Mickael!<br>
<br>
This is not entirely true - you can define AVPs with
the integer value 0. Those will have avp->flags ==
0 and avp->data == 0.<br>
What I'd do, is to note down the avp->id value of
those AVPs and then try to see their names. To do
that, you'd have to look into the avp_map and
avp_map_shm maps to see the corresponding name for
that id. Alternatively you can call in your script the
avp_print() method, which prints all the AVPs for a
specific transaction along with their id and names.
Let me know how this goes.<br>
<br>
</span> Best regards,</tt><span>
<pre cols="72">Răzvan Crainea
OpenSIPS Solutions
<a href="http://www.opensips-solutions.com" target="_blank">www.opensips-solutions.com</a></pre>
</span>
<div>
<div>
<div>On 06/18/2015 12:48 PM, Mickael Marrache wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">To add more information, I remember
there was no way to define an integer AVP with
value 0. I see a lot of such AVPs.</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, Jun 18, 2015 at
12:03 PM, Mickael Marrache <span dir="ltr"><<a href="mailto:mickaelmarrache@gmail.com" target="_blank"></a><a href="mailto:mickaelmarrache@gmail.com" target="_blank">mickaelmarrache@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Correction of my previous
email.
<div><br>
</div>
<div>When I said I found AVPs without data,
I may be wrong. avp->flags == 0
probably means the AVP data is an integer.
So, that explains the weird values (e.g.
0x8000) I tried to interpret as memory
addresses.</div>
<span><font color="#888888">
<div><br>
</div>
<div>Mickael</div>
</font></span></div>
<div>
<div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, Jun 18,
2015 at 11:12 AM, Mickael Marrache <span dir="ltr"><<a href="mailto:mickaelmarrache@gmail.com" target="_blank"></a><a href="mailto:mickaelmarrache@gmail.com" target="_blank">mickaelmarrache@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi Razvan,
<div><br>
</div>
<div>Here is what I've done.</div>
<div><br>
</div>
<div>I took a core dump of the
attendant process. Then, I
stopped OpenSIPS so that it
frees allocated fragments, and
at the end lists all fragments
that are still allocated.</div>
<div><br>
</div>
<div>In this list of fragments, I
can see a lot of AVPs.</div>
<div><br>
</div>
<div>I see some AVPs without data
(avp->data == NULL,
avp->flags == 0). But
something is weird, it looks
like that all AVPs that don't
have data have the same id. It
looks like duplicate AVPs (in
different memory fragments).</div>
<div><br>
</div>
<div>Some AVPs do have data and
have a format that looks valid.</div>
<div><br>
</div>
<div>Some AVPs looks corrupted.
For example, I found an AVP with
same ID as the AVPs without
data, but avp->data == 0x8000
which looks completely wrong.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Mickael</div>
</div>
<div>
<div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On
Thu, Jun 18, 2015 at 10:11
AM, Mickael Marrache <span dir="ltr"><<a href="mailto:mickaelmarrache@gmail.com" target="_blank"></a><a href="mailto:mickaelmarrache@gmail.com" target="_blank">mickaelmarrache@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi Razvan,
<div><br>
</div>
<div>I created a core
dump for the attendant
process. Is it enough
or we also need core
dumps for other
processes? Note that
the leak appears in
shared memory.</div>
<div><br>
</div>
<div>We do use QM debug
for this version, this
is how I discovered
the remaining AVPs at
shutdown where the
remaining allocated
memory fragments are
listed.</div>
<div><br>
</div>
<div>Do you know where I
should look for the
AVPs in the core dump?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Mickael </div>
</div>
<div>
<div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On
Tue, Jun 16, 2015
at 5:11 PM, Răzvan
Crainea <span dir="ltr"><<a href="mailto:razvan@opensips.org" target="_blank"></a><a href="mailto:razvan@opensips.org" target="_blank">razvan@opensips.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<tt>Hi,
Mickael!<br>
<br>
I don't know
what exactly
might cause
the leak. What
you can do is
to try to get
a core dump
(using tools
like gcore)
during low (or
unexisting)
traffic and
try to see
what do the
AVPs that are
leaking
contain. Are
you using QM
debug?<br>
<br>
Best regards,<br>
</tt>
<pre cols="72">Răzvan Crainea
OpenSIPS Solutions
<a href="http://www.opensips-solutions.com" target="_blank">www.opensips-solutions.com</a></pre>
<div>
<div>
<div>On
05/27/2015
12:37 PM,
Mickael
Marrache
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Any
idea? Is there
something that
may help
finding the
leak cause?</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On
Tue, May 19,
2015 at 1:17
PM, Mickael
Marrache <span dir="ltr"><<a href="mailto:mickaelmarrache@gmail.com" target="_blank"></a><a href="mailto:mickaelmarrache@gmail.com" target="_blank">mickaelmarrache@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Any
idea what we
should do?
<div><br>
</div>
<div>I may be
doing
something
wrong but I
don't remember
I had to take
care of memory
management
when dealing
with AVPs.</div>
<div><br>
</div>
<div>Am I
right?</div>
</div>
<br>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
<br>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
Users mailing list
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
</blockquote>
<br>
</div></div></div>
<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>