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.