diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-04-11 22:54:54 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-11 22:54:54 -0700 |
| commit | f3ca8d5dd5c23594bda07893ae374bed7981d473 (patch) | |
| tree | 29d8c6c061b4f5cb96f4de0221c919c6881a2431 /include/linux | |
| parent | b95db64258b96d862b2d24ba825b98ac05f9c2fd (diff) | |
[PATCH] posix message queue update
From: Manfred Spraul <manfred@colorfullife.com>
My discussion with Ulrich had one result:
- mq_setattr can accept implementation defined flags. Right now we have
none, but we might add some later (e.g. switch to CLOCK_MONOTONIC for
mq_timed{send,receive} or something similar). When we add flags, we
might need the fields for additional information. And they don't hurt.
Therefore add four __reserved fields to mq_attr.
- fail mq_setattr if we get unknown flags - otherwise glibc can't detect
if it's running on a future kernel that supports new features.
- use memset to initialize the mq_attr structure - theoretically we could
leak kernel memory.
- Only set O_NONBLOCK in mq_attr, explicitely clear O_RDWR & friends.
openposix uses getattr, attr |=O_NONBLOCK, setattr - a sane approach.
Without clearing O_RDWR, this fails.
I've retested all openposix conformance tests with the new patch - the two
new FAILED tests check undefined behavior. Note that I won't have net
access until Sunday - if the message queue patch breaks something important
either ask Krzysztof or drop it.
Ulrich had another good idea for SIGEV_THREAD, but I must think about it.
It would mean less complexitiy in glibc, but more code in the kernel. I'm
not yet convinced that it's overall better.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mqueue.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/mqueue.h b/include/linux/mqueue.h index c0c5fcc89f0e..535fe4b2f14b 100644 --- a/include/linux/mqueue.h +++ b/include/linux/mqueue.h @@ -27,6 +27,7 @@ struct mq_attr { long mq_maxmsg; /* maximum number of messages */ long mq_msgsize; /* maximum message size */ long mq_curmsgs; /* number of messages currently queued */ + long __reserved[4]; /* ignored for input, zeroed for output */ }; #define NOTIFY_NONE 0 |
