Summary:ASTERISK-09721: Race condition on cdr_pgsql config reload
Reporter:Prashant Jois (prashant_jois)Labels:
Date Opened:2007-06-20 14:49:43Date Closed:2007-06-20 17:32:46
Versions:Frequency of
Environment:Attachments:( 0) cdr_pgsql.diff
Description:I noticed that in cdr_pgsql.c the reload() function calls my_unload_module() followed by my_load_module().  However, neither of these functions acquires the lock "pgsql_lock" before releasing the global database connection handle.  This spells disaster if a thread is running through pgsql_log() when a reload takes place.

I propose adding a lock/unlock in reload().


Submitted is a patch (cdr_pgsql.diff) for the proposed modification on cdr_pgsql.c  for Asterisk 1.4.5.  
Comments:By: Jason Parker (jparker) 2007-06-20 15:02:14

You're going to need to have a disclaimer on file before we can review/use this patch (the same goes for your other bug report).

Please see http://asterisk.org/developers/bug-guidelines under the heading "The License Agreement (disclaimer)"

By: Prashant Jois (prashant_jois) 2007-06-20 17:20:27

I don't have easy access to a fax machine, so this will probably not get done.  Anyway, you don't need to use my patch... it's not exactly revolutionary, a lock and an unlock on the mutex, 2 lines of code.  Same goes for the other bug, 3 lines of code.

By: Jason Parker (jparker) 2007-06-20 17:32:46

Fixed in svn branches 1.4 and trunk in revisions 70554 and 70555.