[Cluster-devel] libdlm dlm_ls_lock_wait() doesn't.

David Teigland teigland at redhat.com
Thu Mar 20 14:39:02 UTC 2008


On Wed, Mar 19, 2008 at 03:35:11PM -0700, Joel Becker wrote:
> Folks,
> 	Another problem I've run into with libdlm - call
> dlm_ls_lock_wait() on a lock that another node holds, and it returns
> instead of blocking.  This is not a trylock (LKF_NOQUEUE).  Trylocks
> work as expected.  A blocking lock attempt does not block, it just
> fails.  I haven't had the time to nail it yet, so if you get there
> first, excellent.

I've tested both threaded and non-threaded dlm_ls_lock_wait() and they
seem to work for me.  A mistake that I got hung up on for a while was that
a non-threaded program must link against libdlm_lt, not libdlm.

So, a threaded program needs: -D_REENTRANT -lpthread -ldlm
and a non-threaded program needs: -ldlm_lt

Also, in a threaded program, you need to call dlm_ls_pthread_init(handle);
right after creating the lockspace.  I'm not sure what the symptoms would
be if you left out the pthread_init().  The symptoms when I mistakenly
linked my non-threaded program with libdlm were that dlm_ls_lock_wait()
didn't return at all.




More information about the Cluster-devel mailing list