From: Steven Stewart-Gallus <sstewartgallu...@mylangara.bc.ca> Currently the only thread-safe way of using mq_notify with message queues is to use the SIGEV_THREAD option. Unfortunately, existing wrappers around such functionality spawn a thread each time a notification happens instead of caching threads which is slow and inconvenient for debugging. This change lets message queues use SIGEV_THREAD_ID with mq_notify and so target notifications to only one thread at a time which is thread-safe.
Signed-off-by: Steven Stewart-Gallus <sstewartgallu...@mylangara.bc.ca> --- Hello! This is a simple patch I made more for the purpose of learning how the kernel works then for any serious purpose. Currently, in my own program I now simply use a thread pool and poll for asynchronously running message sends and receives but a thread-safe mq_notify would have been useful for me and possibly saved me some effort. So, I won't be seriously bothered if this patch is rejected but I think other people might find it useful nonetheless. I also think this behaviour seems quite natural and appropriate to support. I am sending this patch for review but I am pretty sure it is mistaken in some ways. In particular, I believe this patch is wrong because I don't believe it filters out thread ids that belong to other processes and I am not sure how to do that. Thank you, Steven Stewart-Gallus diff --git a/man3/mq_notify.3 b/man3/mq_notify.3 index a71aac4..41a1b96 100644 --- a/man3/mq_notify.3 +++ b/man3/mq_notify.3 @@ -95,6 +95,16 @@ as if it were the start function of a new thread. See .BR sigevent (7) for details. +.TP +.BR SIGEV_THREAD_ID " (Linux-specific)" +As for +.BR SIGEV_SIGNAL , +but the signal is targeted at the thread whose ID is given in +.IR sigev_notify_thread_id , +which must be a thread in the same process as the caller. +See +.BR sigevent (7) +for general details. .PP Only one process can be registered to receive notification from a message queue. diff --git a/man7/sigevent.7 b/man7/sigevent.7 index 9cec77e..15da9fe 100644 --- a/man7/sigevent.7 +++ b/man7/sigevent.7 @@ -125,8 +125,10 @@ structure that defines attributes for the new thread (see .TP .BR SIGEV_THREAD_ID " (Linux-specific)" .\" | SIGEV_SIGNAL vs not? -Currently used only by POSIX timers; see -.BR timer_create (2). +Currently used only by POSIX timers and message queues; see +.BR timer_create (2) +and +.BR mq_notify (2). .SH CONFORMING TO POSIX.1-2001. .SH SEE ALSO -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/