Ups, sorry...here is the proper patch. Regards,
Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 05/20/2013 07:40 PM, Ronald Cepres wrote: > Hi Bogdan, > > Thanks for the reply. However, the patch that is attached is empty (0 > bytes and doesn't contain anything). > > Regards, > > > On Tue, May 21, 2013 at 12:36 AM, Bogdan-Andrei Iancu > <bog...@opensips.org <mailto:bog...@opensips.org>> wrote: > > Hello, > > Thanks to the help in debugging this, the bug was found and a > patch is available for testing (see attached). Please have it > tested and let me know if it fixes the problem. > > Regards, > > Bogdan-Andrei Iancu > OpenSIPS Founder and Developer > http://www.opensips-solutions.com > > > On 05/16/2013 07:28 PM, Ronald Cepres wrote: >> >> Drouting crashes when selecting next gateway. Did a little >> investigation, and FWIW the next gateway's carrier status is >> disabled but the carrier's only gateway is enabled. Looked at the >> backtrace of the core dump, and found that it crashed while >> comparing two strings on get_gw_by_id called by use_next_gw. The >> strings compared were apparently GW ID strings. >> >> I attached the GDB btfull logs (replaced some sensitive info with >> dummy text) for reference. Take note that 'dont optimize' flag >> was not set so some of the values were optimized and the crash >> happened randomly so I can't actually reproduce the crash. >> >> I'm using Opensips 1.9 using this source >> tarball: >> http://opensips.org/pub/opensips/latest/src/opensips-1.9.0_src.tar.gz >> >> >> -- >> >> Regards, >> >> Ronald Cepres >> >> >> _______________________________________________ >> Devel mailing list >> de...@lists.opensips.org <mailto:de...@lists.opensips.org> >> http://lists.opensips.org/cgi-bin/mailman/listinfo/devel > > > > > -- > > Ronald Cepres > Network Operations Center > Net Voip Communications, Inc. > > > This message contains confidential information and is intended only > for the individual named. If you are not the named addressee you > should not disseminate, distribute or copy this e-mail. Please notify > the sender immediately by e-mail if you have received this e-mail by > mistake and delete this e-mail from your system. E-mail transmission > cannot be guaranteed to be secure or error-free as information could > be intercepted, corrupted, lost, destroyed, arrive late or incomplete, > or contain viruses. The sender therefore does not accept liability for > any errors or omissions in the contents of this message, which arise > as a result of e-mail transmission. If verification is required please > request a hard-copy version. Net Voip Communications, Inc., 2721 > Forsyth Rd #256, Winter park, FL 32792. www.netvoipcommunications.com > <http://www.netvoipcommunications.com/> >
Index: modules/drouting/drouting.c =================================================================== --- modules/drouting/drouting.c (revision 10023) +++ modules/drouting/drouting.c (working copy) @@ -1044,13 +1044,23 @@ if (avp) destroy_avp(avp); } - /* remove old gw ID */ + /* remove old gw ID and search next one */ avp = NULL; do { if (avp) destroy_avp(avp); avp = search_first_avp(gw_id_avp.type, gw_id_avp.name, NULL, 0); }while (avp && (avp->flags&AVP_VAL_STR)==0 ); - if (avp) destroy_avp(avp); + if (!avp) { + LM_WARN("no GWs found at all -> have you done do_routing in script ?? \n"); + return -1; + } + do { + if (avp) destroy_avp(avp); + avp = search_first_avp(gw_id_avp.type, gw_id_avp.name, NULL, 0); + }while (avp && (avp->flags&AVP_VAL_STR)==0 ); + /* any GW found ? */ + if (!avp) + goto rule_fallback; /* search for the first RURI AVP containing a string */ avp_ru = NULL; @@ -1066,12 +1076,7 @@ LM_DBG("new RURI set to <%.*s>\n", val.s.len,val.s.s); /* get value for next gw ID from avp */ - if (avp) { - get_avp_val(avp, &val); - } else { - /* if no other ID found, simply use the GW as good */ - break; - } + get_avp_val(avp, &val); /* we have an ID, so we can check the GW state */ lock_start_read( ref_lock ); @@ -2013,7 +2018,7 @@ { unsigned short j; for ( j=0 ; j<pgwa->ips_no ; j++) - if ( (pgwa->ports[j]==0 || pgwa->ports[j]==port) && + if ( (pgwa->ports[j]==0 || port==0 || pgwa->ports[j]==port) && ip_addr_cmp( &pgwa->ips[j], ip) ) return 1; return 0; }
_______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users