[PATCH] Fix for database locking crashes (was Re: bogofilter/bogoutil concurrency crash?)

Jim Correia jim.correia at pobox.com
Mon Apr 7 07:30:24 CEST 2003


On Monday, April 7, 2003, at 01:12  AM, David Relson wrote:

> The sequence "db_close(handle,??); handle = NULL; goto open_err" is 
> inefficient.  open_err: calls dbh_free(handle) and returns NULL.  As 
> you point out, the call to dbh_free() is not needed because db_close() 
> has already called dbh_free().  The code after the call to db_close() 
> should be "return NULL" (which is simpler).

Fair enough. (In my own code I usually have centralized cleanup and a 
single return at the bottom of the function. In this case I was trying 
to adhere to the existing code style, but I can see how yours is a 
better fit.)

> Also, you added a "goto open_error".  That exits the "waiting for the 
> lock" loop, which is _not_ what we want.

Thanks for catching this. (In my editor indent and tab are both set at 
4 so the entire for block was flush with the brace, and my bug was 
masked by the caller also looping on the lock failure.)

> The attached patch has the critical "handle = NULL" and added test for 
> handle != NULL before using it.  Give it a try and let me know how 
> well it works (compared to your patch).

make check still passes and the bug is likewise corrected.

Thanks,
Jim





More information about the bogofilter-dev mailing list