[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