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

2006-07-13 Thread Vincent CHAVANIS
Maybe i'm missing something but,

when executing  list = dict_get(conn_pool, key);

//---
void *dict_get(Dict *dict, Octstr *key)
{
long i;
Item *p;
void *value;
  
lock(dict);
i = key_to_index(dict, key);
if (dict-tab[i] == NULL)
p = NULL;
else
p = gwlist_search(dict-tab[i], key, item_has_key);
if (p == NULL)
value = NULL;
else
value = p-value;
unlock(dict);
return value;
}
//--- 

if p==NULL (the real question is here) then 'value' will be set to NULL too, 
then returned
so List *list will be NULLed.
In that case, gwlist_delete_equal(list, conn) will pannic.

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: devel@kannel.org
Sent: Thursday, July 13, 2006 5:22 PM
Subject: Re: [PATCH] 326: SMSbox CRASH: PANIC: 
gwlib/list.c:502:lock:Assertion


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: devel@kannel.org
 Sent: Wednesday, July 12, 2006 10:34 PM
 Subject: Re: [PATCH] 326: 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.0 +0200
 +++ /gateway/gwlib/http.c   2006-06-26 20:08:53.0 +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.0 +0200
 +++ /gateway/gwlib/http.c   2006-06-26 20:08:53.0 +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@kannel.org
 http://www.kannel.org/mailman/listinfo/devel









-- 
Thanks,
Alex







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

2006-07-12 Thread Vincent CHAVANIS
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: devel@kannel.org
Sent: Wednesday, July 12, 2006 10:34 PM
Subject: Re: [PATCH] 326: 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.0 +0200
 +++ /gateway/gwlib/http.c   2006-06-26 20:08:53.0 +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.0 +0200
 +++ /gateway/gwlib/http.c   2006-06-26 20:08:53.0 +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@kannel.org
 http://www.kannel.org/mailman/listinfo/devel