2004-04-14 04:53:13

by Manfred Spraul

[permalink] [raw]
Subject: Re: Fw: [PATCH] Fix mq_notify with SIGEV_NONE notification

Hi Jakub,

Jakub wrote:

>mq_notify (q, NULL)
>and
>struct sigevent ev = { .sigev_notify = SIGEV_NONE };
>mq_notify (q, &ev)
>are not the same thing in POSIX, yet the kernel treats them the same.
>
What should mq_notify(q, &{.sigev_notify = SIGEV_NONE}) do? Register a
notification, but deliver nothing?

--
Manfred


2004-04-14 06:26:38

by Jakub Jelinek

[permalink] [raw]
Subject: Re: Fw: [PATCH] Fix mq_notify with SIGEV_NONE notification

On Wed, Apr 14, 2004 at 06:52:59AM +0200, Manfred Spraul wrote:
> >mq_notify (q, NULL)
> >and
> >struct sigevent ev = { .sigev_notify = SIGEV_NONE };
> >mq_notify (q, &ev)
> >are not the same thing in POSIX, yet the kernel treats them the same.
> >
> What should mq_notify(q, &{.sigev_notify = SIGEV_NONE}) do? Register a
> notification, but deliver nothing?

Yes. It makes it impossible to mq_notify for others until the owner
mq_notify (q, NULL) or until a message arrives at the queue while nobody is
blocked in mq_{,timed}receive or until the mqd_t through which it has been
registered is mq_close()d.
It is not very useful, sure, but neither is having two different
ways how to unregister notification, one is completely enough.
At which point it is IMHO better to follow the standard (and what other
OSes do), rather than invent something new.

Jakub