[PATCH] 0000326: SMSbox CRASH: PANIC: gwlib/list.c:502: lock:Assertion

Vincent CHAVANIS vincent at telemaque.fr
Thu Jul 13 01:20:45 CEST 2006


Yep, it fixes the problem (or may fixes the problem as it does not panic anymore for the moment)

Someone can confirm this too ?

Vincent.

--
Telemaque - NICE - (FR)
Service Technique - Developpement
http://www.telemaque.fr/
vincent at telemaque.fr
Tel : +33 4 93 97 71 64 (fax 68)

----- Original Message ----- 
From: "Alexander Malysh" <amalysh at kannel.org>
To: <devel at kannel.org>
Sent: Wednesday, July 12, 2006 10:34 PM
Subject: Re: [PATCH] 0000326: SMSbox CRASH: PANIC: gwlib/list.c:502: lock:Assertion


> Hi,
> 
> this patch doesn't add anything and doesn't fix #326.
> List in conn_pool dictionary in function check_pool_conn is never NULL!
> Just look how we add Connection check to FDSet, function conn_pool_put:
> 
>     key = conn_pool_key(host, port);
>     mutex_lock(conn_pool_lock);
>     list = dict_get(conn_pool, key);
>     if (list == NULL) {
>         list = gwlist_create();
>         dict_put(conn_pool, key, list);
>     }
>     gwlist_append(list, conn);
>     /* register connection to get server disconnect */
>     conn_register_real(conn, client_fdset, check_pool_conn, key, 
> octstr_destroy_item);
> 
> If this patch fix #326 then we have heavy race condition somewhere in 
> the conn.c,fdset.c,http.c.
> 
> Could someone to 100% confirm that this patch fix #326?
> 
> Thanks,
> Alex
> 
> Vincent CHAVANIS schrieb:
>> We have here an issue :
>> 
>> 
>> -list is not checked in gwlist_delete_equal()
>> So if dict_get(conn_pool, key) returns NULL the process panic.
>> 
>> 
>> 
>> diff -rau /gateway-cvs/gwlib/http.c /gateway/gwlib/http.c
>> --- /gateway-cvs/gwlib/http.c   2006-04-01 19:45:13.000000000 +0200
>> +++ /gateway/gwlib/http.c       2006-06-26 20:08:53.000000000 +0200
>> @@ -848,7 +848,7 @@
>>          List *list;
>>          mutex_lock(conn_pool_lock);
>>          list = dict_get(conn_pool, key);
>> -        if (gwlist_delete_equal(list, conn) > 0) {
>> +        if (list != NULL && gwlist_delete_equal(list, conn) > 0) {
>>              /*
>>               * ok, connection was still within pool. So it's
>>               * safe to destroy this connection.
>> 
>> 
>> 
>> --
>> Telemaque - NICE - (FR)
>> Service Technique - Developpement
>> http://www.telemaque.fr/
>> vincent at telemaque.fr
>> Tel : +33 4 93 97 71 64 (fax 68)
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> diff -rau /gateway-cvs/gwlib/http.c /gateway/gwlib/http.c
>> --- /gateway-cvs/gwlib/http.c   2006-04-01 19:45:13.000000000 +0200
>> +++ /gateway/gwlib/http.c       2006-06-26 20:08:53.000000000 +0200
>> @@ -848,7 +848,7 @@
>>          List *list;
>>          mutex_lock(conn_pool_lock);
>>          list = dict_get(conn_pool, key);
>> -        if (gwlist_delete_equal(list, conn) > 0) {
>> +        if (list != NULL && gwlist_delete_equal(list, conn) > 0) {
>>              /*
>>               * ok, connection was still within pool. So it's
>>               * safe to destroy this connection.
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> _______________________________________________
>> devel mailing list
>> devel at kannel.org
>> http://www.kannel.org/mailman/listinfo/devel
> 
> 
>




More information about the devel mailing list