• Andrew Morton's avatar
    [PATCH] posix message queue update · f3ca8d5d
    Andrew Morton authored
    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.
    f3ca8d5d
mqueue.c 29.9 KB