From owner-freebsd-arch@freebsd.org Sun Oct 2 03:41:07 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 25D22AC4ACC for ; Sun, 2 Oct 2016 03:41:07 +0000 (UTC) (envelope-from kabaev@gmail.com) Received: from mail-qk0-x22d.google.com (mail-qk0-x22d.google.com [IPv6:2607:f8b0:400d:c09::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DA994D9E; Sun, 2 Oct 2016 03:41:06 +0000 (UTC) (envelope-from kabaev@gmail.com) Received: by mail-qk0-x22d.google.com with SMTP id z190so139291249qkc.3; Sat, 01 Oct 2016 20:41:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version; bh=73xZOSUuSfeQKdOTDJtBI7w496JoS/Kq1cjPbmADqm8=; b=KfjQBkhlcryNebI1pOcQ70j5Ye+68tCEvhxOQZDBu2JlyWPG4t8yKglN3Qtxm0cZtu IcebD1GKc4aGdh79OCOaapAW6ZVddhqAAGIghMNKEhoyGi93QYLoTy32NX6ldDZ3mHxx ClK/WLoBVSY5U+mkO8uObu6tPRWZOyV6lJg6ZD9j8BsdZ79atkV9EL859e/xSjreo2An WfAl58NM7y0Y4dEebFo1yCMnC0WKJOqj83Fq48OhRzCRQw+9aFYSVAsCC7FB6iv0eun8 U5ImyBrDdYTGTDg+T313PJvKsbqEDWS0LwtTbonA2EksVbUyLRpyd8zVo3Y4hn2EO1bg 8ITg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version; bh=73xZOSUuSfeQKdOTDJtBI7w496JoS/Kq1cjPbmADqm8=; b=Hw0SIsE3E/BpKykq/8lwNKl919SOpuBMyyP5JezBOFxo+lfQl+2w+K5WBDWClg+0g0 e8o3ByMq12VwwPjgYiMfcjbWMOie9f7Gvg/yhD28kZvc/f1zjjhGEO/kpV1NsPXQTSrV Zsje7YcXz2xSqolkim0lhU+Cg48kZkmag6ewFpqyijXlPiI4otUzLMELLrETgspJTRbS Eo1LsgkPbefk2RJJMpLjt+jk/FYX+xKq3IMz7Fpuqloo2yKTBLiy9uM+rpoBitbSg7Ps OuizWTjXV0zoqMj2p9PgWVeGNeokMw3I8BGWzPwo2zXcmz65YMGAzusR5S2iybfUQLn0 8QLA== X-Gm-Message-State: AA6/9Rk6Occm8PcMWyrgQnrOxc73EVSwVqFQ40W89LCDgw5M+uj/s8iqFggypnQ6cojJrA== X-Received: by 10.55.19.36 with SMTP id d36mr14069268qkh.247.1475379665973; Sat, 01 Oct 2016 20:41:05 -0700 (PDT) Received: from kan ([2601:18f:802:4680:226:18ff:fe00:232e]) by smtp.gmail.com with ESMTPSA id i65sm14481262qtb.18.2016.10.01.20.41.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 01 Oct 2016 20:41:04 -0700 (PDT) Date: Sat, 1 Oct 2016 23:40:59 -0400 From: Alexander Kabaev To: Konstantin Belousov Cc: Jilles Tjoelker , Lewis Donzis , deischen@freebsd.org, freebsd-arch@freebsd.org Subject: Re: mq on kqueue broken after upgrade to FreeBSD 11 Message-ID: <20161001234059.6f51310b@kan> In-Reply-To: <20161001210722.GC38409@kib.kiev.ua> References: <8A6CD0D3-C4D5-40DF-B2AD-4C454CC88AD1@perftech.com> <20160930094544.GP38409@kib.kiev.ua> <19A6EEAA-C68E-4DAD-B98F-4D904734BD8B@perftech.com> <20160930152006.GS38409@kib.kiev.ua> <20160930184418.1047afc2@kan> <20161001092515.GW38409@kib.kiev.ua> <20161001201655.GA91457@stack.nl> <20161001210722.GC38409@kib.kiev.ua> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.29; amd64-portbld-freebsd12.0) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/Dx6k8femPnHps78YWcQVe8b"; protocol="application/pgp-signature" 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: Sun, 02 Oct 2016 03:41:07 -0000 --Sig_/Dx6k8femPnHps78YWcQVe8b Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Sun, 2 Oct 2016 00:07:22 +0300 Konstantin Belousov wrote: > On Sat, Oct 01, 2016 at 10:16:55PM +0200, Jilles Tjoelker wrote: > > The idea is good, but perhaps call the function mq_getfd_np() to > > clarify it returns a file descriptor. Also, the __ versions should > > not be exported since they are not used outside the library (they > > can be exported if and when needed). =20 >=20 >=20 > diff --git a/include/mqueue.h b/include/mqueue.h > index 788d0a1..e1c0f27 100644 > --- a/include/mqueue.h > +++ b/include/mqueue.h > @@ -50,7 +50,9 @@ ssize_t mq_timedreceive(mqd_t, char > *__restrict, size_t, int mq_timedsend(mqd_t, const char *, > size_t, unsigned, const struct timespec *); > int mq_unlink(const char *); > -int __mq_oshandle(mqd_t mqd); > +#if __BSD_VISIBLE > +int mq_getfd_np(mqd_t mqd); > +#endif /* __BSD_VISIBLE */ > =20 > __END_DECLS > #endif > diff --git a/include/time.h b/include/time.h > index 14d6044..c172538 100644 > --- a/include/time.h > +++ b/include/time.h > @@ -194,6 +194,7 @@ char *timezone(int, int); /* XXX XSI > conflict */ void tzsetwall(void); > time_t timelocal(struct tm * const); > time_t timegm(struct tm * const); > +int timer_oshandle_np(timer_t timerid); > #endif /* __BSD_VISIBLE */ > =20 > #if __POSIX_VISIBLE >=3D 200809 || defined(_XLOCALE_H_) > diff --git a/lib/librt/Symbol.map b/lib/librt/Symbol.map > index 161bb76..fef3c15 100644 > --- a/lib/librt/Symbol.map > +++ b/lib/librt/Symbol.map > @@ -25,6 +25,11 @@ FBSD_1.0 { > timer_getoverrun; > }; > =20 > +FBSD_1.5 { > + mq_getfd_np; > + timer_oshandle_np; > +}; > + > FBSDprivate_1.0 { > _aio_read; > _aio_write; > diff --git a/lib/librt/mq.c b/lib/librt/mq.c > index 750e969..513fa72 100644 > --- a/lib/librt/mq.c > +++ b/lib/librt/mq.c > @@ -272,8 +272,9 @@ __mq_unlink(const char *path) > return __sys_kmq_unlink(path); > } > =20 > +#pragma weak mq_getfd_np > int > -__mq_oshandle(mqd_t mqd) > +mq_getfd_np(mqd_t mqd) > { > =20 > return (mqd->oshandle); > diff --git a/lib/librt/timer.c b/lib/librt/timer.c > index 90269c2..b5f775c 100644 > --- a/lib/librt/timer.c > +++ b/lib/librt/timer.c > @@ -175,8 +175,9 @@ __timer_settime(timer_t timerid, int flags, > flags, value, ovalue); > } > =20 > +#pragma weak timer_oshandle_np > int > -__timer_oshandle(timer_t timerid) > +timer_oshandle_np(timer_t timerid) > { > =20 > return (timerid->oshandle); > diff --git a/tests/sys/mqueue/Makefile b/tests/sys/mqueue/Makefile > index ce5033c..251c497 100644 > --- a/tests/sys/mqueue/Makefile > +++ b/tests/sys/mqueue/Makefile > @@ -10,8 +10,8 @@ CFLAGS+=3D -I${SRCTOP}/tests > =20 > PROGS+=3D mqtest1 > PROGS+=3D mqtest2 > -#PROGS+=3D mqtest3 > -#PROGS+=3D mqtest4 > +PROGS+=3D mqtest3 > +PROGS+=3D mqtest4 > PROGS+=3D mqtest5 > =20 > LIBADD+=3D rt > diff --git a/tests/sys/mqueue/mqtest3.c b/tests/sys/mqueue/mqtest3.c > index c4b849e..3e20c4d 100644 > --- a/tests/sys/mqueue/mqtest3.c > +++ b/tests/sys/mqueue/mqtest3.c > @@ -62,9 +62,10 @@ main(void) > buf =3D malloc(attr.mq_msgsize); > for (j =3D 0; j < LOOPS; ++j) { > FD_ZERO(&set); > - FD_SET(__mq_oshandle(mq), &set); > + FD_SET(mq_getfd_np(mq), &set); > alarm(3); > - status =3D select(__mq_oshandle(mq)+1, &set, > NULL, NULL, NULL); > + status =3D select(mq_getfd_np(mq) + 1, &set, > NULL, > + NULL, NULL); > if (status !=3D 1) > err(1, "child process: select()"); > status =3D mq_receive(mq, buf, > attr.mq_msgsize, &prio); @@ -94,8 +95,9 @@ main(void) > } > alarm(3); > FD_ZERO(&set); > - FD_SET(__mq_oshandle(mq), &set); > - status =3D select(__mq_oshandle(mq)+1, NULL, > &set, NULL, NULL); > + FD_SET(mq_getfd_np(mq), &set); > + status =3D select(mq_getfd_np(mq) + 1, NULL, > &set, > + NULL, NULL); > if (status !=3D 1) > err(1, "select()"); > status =3D mq_send(mq, buf, attr.mq_msgsize, > PRIO); diff --git a/tests/sys/mqueue/mqtest4.c > b/tests/sys/mqueue/mqtest4.c index 474d212..b0b3952 100644 > --- a/tests/sys/mqueue/mqtest4.c > +++ b/tests/sys/mqueue/mqtest4.c > @@ -57,7 +57,7 @@ main(void) > mq =3D mq_open(MQNAME, O_RDWR); > if (mq =3D=3D (mqd_t)-1) > err(1, "child: mq_open"); > - EV_SET(&kev, __mq_oshandle(mq), EVFILT_READ, EV_ADD, > 0, 0, 0); > + EV_SET(&kev, mq_getfd_np(mq), EVFILT_READ, EV_ADD, > 0, 0, 0); status =3D kevent(kq, &kev, 1, NULL, 0, NULL); > if (status =3D=3D -1) > err(1, "child: kevent"); > @@ -89,7 +89,7 @@ main(void) > =20 > signal(SIGALRM, sighandler); > kq =3D kqueue(); > - EV_SET(&kev, __mq_oshandle(mq), EVFILT_WRITE, > EV_ADD, 0, 0, 0); > + EV_SET(&kev, mq_getfd_np(mq), EVFILT_WRITE, EV_ADD, > 0, 0, 0); status =3D kevent(kq, &kev, 1, NULL, 0, NULL); > if (status =3D=3D -1) > err(1, "kevent"); This looks good to me, thank you. If there is a desire to keep old names exported, we can provide them as compat symbols too, so that old binaries keep working. Software built from sources is better off adapting new names which I think are quite a bit better. --=20 Alexander Kabaev --Sig_/Dx6k8femPnHps78YWcQVe8b Content-Type: application/pgp-signature Content-Description: Цифровая подпись OpenPGP -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJ8BAEBCgBmBQJX8IHLXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRDNUY3RDk5NTk5QjY0MUUxM0M1MTU2OTEw NzEzMjI5OTkyNzkyRTdFAAoJEAcTIpmSeS5+53gQAJGhq4+dX6RCUdC60hKgzlbc iZbBwwUK9PgKu2k8U9XMyheynpulo3rx0pK49dv96b7TlldetAOOO3Yc5Lh/gjMT 2dl2Jw4eyDlQx+PwpJvsUayH20BSuDsrKWZPkZ3kdDrKKJ8IenYVcdBUgcm9SrjM PFPGaEJFPAwxC3C78hyiq38PA6T9G/ldlQkjTvD/GBMoKs09hozmUuXHfuWu3nbZ JNy/OJWbPzWdmZ0rbEy0LthELTj5lCKVDscUzdqy4WO3iGIkkpKCNyq8gEgdLzG/ 5As+CKun24rtGHBMyGMHp9VEF8GiBjDIlD03AnQK5OCpNy7zRtJ94C7EY/ukWmj1 3d9diX0Xlk31IlGoCi7/jKny+5reerhYMJiyxCGswwSKxm3dlrlSKKXpHI7sBOKR KH651xmH0gYKBhH7EozNP0UC8/RpesHNl9iuUd4jmNHtu4ij83aYXtgWcTj1EU0z UFs1jZQEgJpk2+y4OoKHEJVbQnCjxmOV3pc1cTSh7qFve8/r5Z2/CaYXVDRnNl4t MaCBSzjGfEzurO7W8c8cYEy/LYjW8t9TaDcuw/hW/n8UTO+ZX3HHahP0pKxIJmGp o6tJUnnpSsIBhDmLOvHoM4Pe8rmOjbOZ52FGqYhk1ztkPPyYUbYQal3VbDm2tDfY 5mIj2aG8AJCQMhrm7Zgd =usTQ -----END PGP SIGNATURE----- --Sig_/Dx6k8femPnHps78YWcQVe8b--