summaryrefslogtreecommitdiff
path: root/src/mq
AgeCommit message (Collapse)AuthorLines
2024-12-23mq: add x32-specific implementations to work around mismatched kernel ABIRich Felker-0/+36
the kernel mq_attr structure has 8 64-bit longs instead of 8 32-bit longs. it's not clear that this is the nicest way to implement the fix, but the concept (translation) is right, and the details can be changed later if desired.
2023-02-12mq_notify: block all (application) signals in the worker threadRich Felker-0/+5
until the mq notification event arrives, it is mandatory that signals be blocked. otherwise, a signal can be received, and its handler executed, in a thread which does not yet exist on the abstract machine. after the point of the event arriving, having signals blocked is not a conformance requirement but a QoI requirement. while the application can unblock any signals it wants unblocked in the event handler thread, if they did not start out blocked, it could not block them without a race window where they are momentarily unblocked, and this would preclude controlled delivery or other forms of acceptance (sigwait, etc.) anywhere in the application.
2023-02-12mq_notify: join worker thread before returning in error pathRich Felker-2/+5
this avoids leaving behind transient resource consumption whose cleanup is subject to scheduling behavior.
2023-02-12mq_notify: rework to fix use-after-close/double-close bugsRich Felker-8/+15
in the error path where the mq_notify syscall fails, the initiating thread may have closed the socket before the worker thread calls recv on it. even in the absence of such a race, if the recv call failed, e.g. due to seccomp policy blocking it, the worker thread could proceed to close, producing a double-close condition. this can all be simplified by moving the mq_notify syscall into the new thread, so that the error case does not require pthread_cancel. now, the initiating thread only needs to read back the error status after waiting for the worker thread to consume its arguments.
2023-02-11mq_notify: use semaphore instead of barrier to sync args consumptionRich Felker-5/+9
semaphores are a much lighter primitive, and more idiomatic with current usage in the code base.
2019-07-28mq_timedsend, mq_timedreceive: add time64, decouple 32-bit time_tRich Felker-0/+34
time64 syscall is used only if it's the only one defined for the arch, or if the requested absolute timeout does not fit in 32 bits. on current 32-bit archs where time_t is a 32-bit type, this makes it statically unreachable. on 64-bit archs, there is no change to the code after preprocessing. on current 32-bit archs, the timeout is passed via an intermediate copy to remove the assumption that time_t is a 32-bit type.
2012-09-06use restrict everywhere it's required by c99 and/or posix 2008Rich Felker-2/+2
to deal with the fact that the public headers may be used with pre-c99 compilers, __restrict is used in place of restrict, and defined appropriately for any supported compiler. we also avoid the form [restrict] since older versions of gcc rejected it due to a bug in the original c99 standard, and instead use the form *restrict.
2012-04-29fix longstanding missing static in mq_notify (namespace pollution)Rich Felker-1/+1
2011-06-25const correctness in mq_notifyRich Felker-1/+1
why did gcc allow this invalid assignment to compile in the first place?
2011-06-07mq names without leading / have impl-def behavior; allowing them is easierRich Felker-9/+2
2011-06-07mq send/recv functions are cancellation pointsRich Felker-2/+2
2011-06-07implement mq_notifyRich Felker-2/+65
2011-06-07add support for POSIX message queues, except mq_notifyRich Felker-0/+99