Re: [PATCH] 0000326: SMSbox CRASH: PANIC: gwlib/list.c:502: lock:Assertion
"Alexander Malysh" <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, just looked through code again and I really don't see how this patch should help and unfortunately I don't see how List in conn_pool dictionary may be NULL. Thanks, Alex Am 13.07.2006, 01:20 Uhr, schrieb Vincent CHAVANIS <[email protected]>: > 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/ > [email protected] > Tel : +33 4 93 97 71 64 (fax 68) > > ----- Original Message ----- > From: "Alexander Malysh" <[email protected]> > To: <[email protected]> > 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/ >>> [email protected] >>> 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 >>> [email protected] >>> http://www.kannel.org/mailman/listinfo/devel >> >> >> > > > -- Thanks, Alex