From owner-freebsd-arch@freebsd.org Fri Sep 30 09:45:51 2016 Return-Path: Delivered-To: freebsd-arch@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A95FFC0112C for ; Fri, 30 Sep 2016 09:45:51 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2ABAD139E for ; Fri, 30 Sep 2016 09:45:51 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id u8U9jjwW017918 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 30 Sep 2016 12:45:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua u8U9jjwW017918 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id u8U9jitf017846; Fri, 30 Sep 2016 12:45:44 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 30 Sep 2016 12:45:44 +0300 From: Konstantin Belousov To: Lewis Donzis Cc: freebsd-arch@freebsd.org Subject: Re: mq on kqueue broken after upgrade to FreeBSD 11 Message-ID: <20160930094544.GP38409@kib.kiev.ua> References: <8A6CD0D3-C4D5-40DF-B2AD-4C454CC88AD1@perftech.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8A6CD0D3-C4D5-40DF-B2AD-4C454CC88AD1@perftech.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Sep 2016 09:45:51 -0000 On Thu, Sep 29, 2016 at 06:11:16PM -0500, Lewis Donzis wrote: > I had posted this on the userland forum, but it was suggested that I re-post it to this mailing list, so here goes??? > > We have applications that are using kevent() with, among other things, POSIX message queues, so they can wake up when data is ready. > > As such, we were using __mq_oshandle() to get a handle from an mqd_t, suitable for passing to kevent(). > > However, this function appears to have been removed from publication in FreeBSD 11.0, although it still exists in the source. I saw some discussion about it being a mistake to have been available previously, but plenty of other __mq_*() functions are still public. > > So the question is, how is one supposed to get a kevent() on a POSIX message queue, now that the fd is no longer available? > > (I realize that one could argue that it was never supported, but it does (did) work, and why else would the kernel uipc_mqueue.c have code for supporting it? And that's not to mention that __mq_oshandle() is still declared in /usr/include/mqueue.h) > Where was a discussion about the function presence being the mistake ? In r291439, symbol versioning for librt was fixed, and apparently __mq_oshandle() is not present in the global symbols list for librt. I suspect that this is an erronous ommission, since the function' declaration is present in the mqueue.h header and it is used by some mqueue tests. As such, I believe that exporting it is the intended option there. The following patch should fix the problem for you. I also exported __timer_oshandle, but there is no similar definition in header. diff --git a/lib/librt/Symbol.map b/lib/librt/Symbol.map index 161bb76..5482488 100644 --- a/lib/librt/Symbol.map +++ b/lib/librt/Symbol.map @@ -18,11 +18,13 @@ FBSD_1.0 { mq_unlink; mq_send; mq_receive; + __mq_oshandle; timer_create; timer_delete; timer_gettime; timer_settime; timer_getoverrun; + __timer_oshandle; }; FBSDprivate_1.0 {