On Friday 29 of June 2012 11:30:51 Denys Vlasenko wrote:
> On 06/28/2012 06:22 PM, Jakub Filak wrote:
> > If a problem directory is locked by a process and the process tries to
> > lock directory again the function dd_lock() fals to infinite loop. In
> > this case the function get_and_set_lock() correctly recognizes that a
> > lock is owned by the process but the function returns an error value 0.
> > The correct returned value is 1 because a directory is locked by the
> > process thus lock was successful.
> 
> No, it is not. If we will return "yes we got the lock" indication
> then the caller will eventually unlock the dir. Which will leave
> it UNLOCKED but the first locking party doesn't know it and still
> believes that it has a lock.
> 
> In other words, locking is presently not designed to be recursive.
> Just letting lock succeed is not enough to make it recursive:
> we need to maintain a recursion counter somewhere.
> 
> I caught a locking bug (missing unlock) when this code path
> was triggered while I was testing one of my changes.


You are right. It is caused by missing unlock.

I've just sent a better patch:
[PATCH] add missing dd_close() to save_dump_dir_from_problem_data()


Regards,
Jakub

Reply via email to