[OpenSIPS-Users] crash / coredump with dispatcher module

Bogdan-Andrei Iancu bogdan at opensips.org
Tue Mar 13 19:12:23 CET 2012


Hi Samuel,

The fix is on SVN - so just update your code.

Many thanks for reporting and troubleshooting this with me.

Regards,
Bogdan

On 03/13/2012 07:34 PM, Samuel Muller wrote:
> Yep, it's what I tried.
>
> Actually, it's in a lab version, so I do several tests with 2 small 
> servers.
>
> The big picture is :
>
> UA -> stateless proxies (with dispatcher) -> statefull+registrar proxy
>
> Later, the dispatcher will be used to send Register requests to 2 
> different registrar servers, and Invite requests to 2 different 
> statefull proxies.
>
> In this actual case, the dispatcher list file contains these lines :
>
> 1 sip:1.2.3.4:5060 <http://1.2.3.4:5060>
> 2 sip:1.2.3.4:5060 <http://1.2.3.4:5060>
> 3 sip:1.2.3.4:5060 <http://1.2.3.4:5060>
> 4 sip:1.2.3.4:5060 <http://1.2.3.4:5060>
>
> In the opensips config :
>
> modparam("dispatcher","list_file","/opt/opensips/etc/opensips/dispatcher.list")
> modparam("dispatcher","use_default",1)
> modparam("dispatcher","dst_avp","$avp(dp_dst)")
> modparam("dispatcher","attrs_avp","$avp(dp_attrs)")
> modparam("dispatcher","grp_avp","$avp(dp_grp)")
> modparam("dispatcher","cnt_avp","$avp(dp_cnt)")
> modparam("dispatcher","hash_pvar","$avp(dp_hash)")
> modparam("dispatcher","setid_pvar","$avp(dp_setid)")
> modparam("dispatcher","ds_ping_from","sip:sep1 at lab.toto.com 
> <mailto:sip%3Asep1 at lab.toto.com>")
> modparam("dispatcher","ds_ping_interval",15)
> modparam("dispatcher","ds_probing_mode",1)
>
> In the opensips routing logic, I would like to separate register and 
> invite requests :
>
> route {
> ...
>     if (!is_method("REGISTER|MESSAGE")) {
>         record_route(";rr=edge");
>     }
>    if (is_method("REGISTER")) {
>         if (!ds_select_dst("1", "0")) {
>             ds_mark_dst("p");
>             ds_select_dst("2", "0");
>         }
>     }
>     if (is_method("INVITE")) {
>         if (!ds_select_dst("3", "0")) {
>             ds_mark_dst("p");
>             ds_select_dst("4", "0");
>         }
>     }
>     route(RELAY);
>     exit;
> }
>
> But, even if I change the routing logic with :
> ...
>     if (is_method("REGISTER")) {
>         ds_select_dst("1", "0");
>     }
>     if (is_method("INVITE")) {
>         ds_select_dst("3", "0");
>     }
> ...
>
> It happens the same crash, same reason.
>
> I'll change the "use_default" param to 0 and re-do tests.
>
>
> .Sam.
>
> Samuel MULLER
>
> On Tue, Mar 13, 2012 at 6:14 PM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Ok, that's the info I was looking for :)..
>
>     Looking at that group, should I understand you have only one
>     destination in there, while having the  "use_default" on ? This
>     makes a bit of none sense - the group has only the default
>     destination (to be used in case of failure), but no regular
>     destination ??
>
>     Anyhow, there is a bug there, but I want to understand your
>     setting, to be sure that the fix will be the right one ;)
>
>     Thanks and regards,
>     Bogdan
>
>
>     On 03/13/2012 04:51 PM, Samuel Muller wrote:
>>     oups, sorry ...
>>
>>     (gdb) p *idx
>>     $1 = {id = 1, nr = 1, last = 0, weight_sum = 0, dlist =
>>     0x7f867d60b458, next = 0x0}
>>
>>     ;)
>>
>>     .Sam.
>>
>>     Samuel MULLER
>>
>>
>>     On Tue, Mar 13, 2012 at 3:40 PM, Bogdan-Andrei Iancu
>>     <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>
>>         Hi Samuel,
>>
>>         Print please "*idx" and not only "idx" - I need its content ;)
>>
>>         Regards,
>>         Bogdan
>>
>>
>>         On 03/13/2012 04:35 PM, Samuel Muller wrote:
>>>         Hello Bogdan,
>>>
>>>         nice to see you again !
>>>
>>>         here the stuff :
>>>
>>>         [Thread debugging using libthread_db enabled]
>>>         Core was generated by `/opt/opensips/sbin/opensips -P
>>>         /opt/opensips/var/run/opensips.pid -m 256 -u sam'.
>>>         Program terminated with signal 8, Arithmetic exception.
>>>         #0  0x00007f26f086c513 in ds_select_dst (msg=0x80ebe8,
>>>         set=<optimized out>, alg=0, mode=<optimized out>,
>>>             max_results=<optimized out>) at dispatch.c:1235
>>>         1235                i = (i+1)%(idx->nr-1);
>>>
>>>         (gdb) p i
>>>         $1 = 0
>>>
>>>         (gdb) p idx
>>>         $2 = (ds_set_p) 0x7f26dee90350
>>>
>>>         (gdb) l
>>>         1230
>>>         1231        i=ds_id;
>>>         1232        while (
>>>         idx->dlist[i].flags&(DS_INACTIVE_DST|DS_PROBING_DST) )
>>>         1233        {
>>>         1234            if(ds_use_default!=0)
>>>         1235                i = (i+1)%(idx->nr-1);
>>>         1236            else
>>>         1237                i = (i+1)%idx->nr;
>>>         1238            if(i==ds_id)
>>>         1239            {
>>>
>>>
>>>         I re-tested with a few modifications, like changing IPs in
>>>         the dispatcher list file, or into the routing logic ("do it
>>>         simple like in the docs examples"), the same problems still
>>>         happens :/
>>>
>>>         here's the corefile if needed :
>>>         http://public.l33.fr/corefile.opensips.tar.gz
>>>
>>>
>>>         Best regards,
>>>
>>>         Samuel MULLER
>>>
>>>
>>>
>>>         On Tue, Mar 13, 2012 at 2:51 PM, Bogdan-Andrei Iancu
>>>         <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>>
>>>             Hello Samuel,
>>>
>>>             In gdb, could you please print the '*idx' and 'i'
>>>             variables ?
>>>
>>>             Thanks and regards,
>>>             Bogdan
>>>
>>>
>>>
>>>
>>>             On 03/07/2012 03:34 PM, Samuel Muller wrote:
>>>
>>>                 Hey all,
>>>
>>>                 I got this crash when testing proxies availability
>>>                 with the dispatcher module :
>>>
>>>                 $ gdb  /opt/opensips/sbin/opensips core
>>>
>>>                 GNU gdb (GDB) 7.3-debian
>>>                 This GDB was configured as "x86_64-linux-gnu".
>>>                 Reading symbols from /opt/opensips/sbin/opensips...done.
>>>                 [New LWP 11580]
>>>
>>>                 [Thread debugging using libthread_db enabled]
>>>                 Core was generated by `/opt/opensips/sbin/opensips -P
>>>                 /opt/opensips/var/run/opensips.pid -m 256 -u sam'.
>>>                 Program terminated with signal 8, Arithmetic exception.
>>>                 #0  0x00007f87b9b54513 in ds_select_dst
>>>                 (msg=0x80f988, set=<optimized
>>>                 out>, alg=0,
>>>                     mode=<optimized out>, max_results=<optimized
>>>                 out>) at dispatch.c:1235
>>>                 1235                i = (i+1)%(idx->nr-1);
>>>
>>>
>>>                 in the opensips.cfg :
>>>
>>>                 modparam("dispatcher","list_file","/opt/opensips/etc/opensips/dispatcher.list")
>>>                 modparam("dispatcher","use_default",1)
>>>                 modparam("dispatcher","dst_avp","$avp(dp_dst)")
>>>                 modparam("dispatcher","attrs_avp","$avp(dp_attrs)")
>>>                 modparam("dispatcher","grp_avp","$avp(dp_grp)")
>>>                 modparam("dispatcher","cnt_avp","$avp(dp_cnt)")
>>>                 modparam("dispatcher","hash_pvar","$avp(dp_hash)")
>>>                 modparam("dispatcher","setid_pvar","$avp(dp_setid)")
>>>                 modparam("dispatcher","ds_ping_from","sip:edge at lab.com
>>>                 <mailto:sip%3Aedge at lab.com>")
>>>                 modparam("dispatcher","ds_ping_interval",30)
>>>                 modparam("dispatcher","ds_probing_mode",1)
>>>
>>>                 route {
>>>                 ...
>>>                     if (!is_method("REGISTER|MESSAGE")) {
>>>                         record_route(";rr=edge");
>>>                     }
>>>                    if (is_method("REGISTER")) {
>>>                         if (!ds_select_dst("1", "0")) {
>>>                             ds_mark_dst("p");
>>>                             ds_select_dst("2", "0");
>>>                         }
>>>                     }
>>>                     if (is_method("INVITE")) {
>>>                         if (!ds_select_dst("3", "0")) {
>>>                             ds_mark_dst("p");
>>>                             ds_select_dst("4", "0");
>>>                         }
>>>                     }
>>>                     route(RELAY);
>>>                     exit;
>>>                 }
>>>
>>>
>>>                 in the dispatcher.list :
>>>
>>>                 1 sip:1.2.3.4:5060 <http://1.2.3.4:5060>
>>>                 2 sip:1.2.3.5:5060 <http://1.2.3.5:5060>
>>>                 3 sip:1.2.3.6:5060 <http://1.2.3.6:5060>
>>>                 4 sip:1.2.3.5:5060 <http://1.2.3.5:5060>
>>>
>>>                 all is running under Debian last stable release +
>>>                 backports.
>>>
>>>                 I would like to know if it's my dispatcher
>>>                 configuration routine
>>>                 that's not correct, or if it's a module problem ?
>>>
>>>                 thank you,
>>>
>>>
>>>                 Samuel MULLER
>>>
>>>                 _______________________________________________
>>>                 Users mailing list
>>>                 Users at lists.opensips.org
>>>                 <mailto:Users at lists.opensips.org>
>>>                 http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>>
>>>             -- 
>>>             Bogdan-Andrei Iancu
>>>             OpenSIPS Founder and Developer
>>>             http://www.opensips-solutions.com
>>>
>>>
>>
>>
>>         -- 
>>         Bogdan-Andrei Iancu
>>         OpenSIPS Founder and Developer
>>         http://www.opensips-solutions.com
>>
>>
>
>
>     -- 
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
>


-- 
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120313/33e393fd/attachment-0001.htm>


More information about the Users mailing list