Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Oct 2016 22:17:42 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Lewis Donzis <lew@perftech.com>
Cc:        Jilles Tjoelker <jilles@stack.nl>, deischen@freebsd.org, freebsd-arch@freebsd.org
Subject:   Re: mq on kqueue broken after upgrade to FreeBSD 11
Message-ID:  <20161006191742.GV38409@kib.kiev.ua>
In-Reply-To: <AD237AD4-443D-40CF-87B8-622C6D68C1B3@perftech.com>
References:  <20161001201655.GA91457@stack.nl> <20161001210722.GC38409@kib.kiev.ua> <20161001231524.GB91457@stack.nl> <20161002114613.GE38409@kib.kiev.ua> <20161002132242.GA2628@stack.nl> <7A72D37B-6C57-41FE-893F-592235A19D9D@perftech.com> <20161002163708.GG38409@kib.kiev.ua> <95CA96C0-A0F2-46B6-8BEA-E1A923FEC91D@perftech.com> <20161005131412.GF38409@kib.kiev.ua> <AD237AD4-443D-40CF-87B8-622C6D68C1B3@perftech.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 05, 2016 at 07:09:03PM -0500, Lewis Donzis wrote:
> Sorry, perhaps I wasn???t clear. As I read it, you suggested that you
> "can and should call close()" on the fd in an mqd_t, and my point was
> simply that such practice would obviously be bad because it would
> fail to release resources allocated by mq_open(). So yes, the correct
> way to close an mqueue is via mq_close(), i.e., we???re not meant to
> circumvent the librt functions.
>
> The problem is that it???s not exactly clean that we have mq_*()
> functions for some operations, whereas for others, we???re required to
> convert the mqd_t to an fd. Of course, this is no fault of FreeBSD,
> and perhaps the POSIX folks should have come up with a better way to
> address this. For example, they could have specified a portable way to
> get the underlying fd from an mqd_t and specified what can and cannot
> be done with the fd.

POSIX does not and can not mandate the implementation.  Existence of the
backing fd is pure implementation detail.  Access to the fd through
mq_getfd_np() is some good will service from the implementation which
is supposed to make additional things possible besides the guarantees
of the POSIX spec.

kqueue(2) is not part of the POSIX, same as the use of mq for the
multiplexed wait (select/poll/kqueue).  POSIX intent is that app
code get notifications by events.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20161006191742.GV38409>