Hello Darren,
In futex_lock_pi(futex.c) when ERESTARTNOINTR which make the syscall to
be reexecuted whatever comes after the sighandler ends.
One trick you can try (I've not tested it!) is use
pthread_timedlock(mutex, abstime) and in sighandler, set abstime values
to cause timeout. Since futex_lock_pi reads the time struct at each
call, it will exit on timeout at reexecution.
Worth trying.
Gilles.
Darren Hart wrote:
I find I need to be able to break out of the blocked state while waiting
to acquire a pthread_mutex. I'm using PI mutexes and want to continue
to do so. As I understand it, I can't use a signal to break out of the
lock as the man pages states:
"If a signal is delivered to a thread waiting for a mutex, upon return
from the signal handler the thread shall resume waiting for the mutex
as if it was not interrupted."
and that pthread_mutex_lock will not return EINTR. I had considered
using cond variables, but I don't think they will provide the same PI
behavior (since the threads are not blocked on the mutex while awaiting
the pthread_cond_signal - right?).
I'm sure I'm not the first to want to do this, does anyone know of a
common best practice for accomplishing such a thing?
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gilles.Carry
Linux Project team
mailto: gilles.carry@xxxxxxxx
Phone: +33 (0)4 76 29 74 27
Addr.: BULL S.A. 1 rue de Provence, B.P. 208 38432 Echirolles Cedex
http://www.bull.com
http://www.bullopensource.org/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html