If there are no objections, I would commit it. I haven't had any problems with this diff for a week.
Rafael On Mon Aug 04, 2025 at 05:30:51PM +0200, Rafael Sadowski wrote: > sys/kern/sys_generic.c: > if (pl[i].events != 0 && pl[i].events != POLLOUT) > DPRINTFN(0, "weird events %x\n", pl[i].events); > > Looks like we have the same behavior as FreeBSD: > > https://codereview.qt-project.org/c/qt/qtbase/+/651677 > > "On FreeBSD when asked for POLLOUT the poll() syscall returns only POLLHUP to > signify the fact that the other side closed the connection. It never sends > POLLERR for EOF cases, which results in a busy-loop inside the Glib > dispatcher: > > - poll() returns immediately with POLLHUP for a closed socket > - socketNotifierSourceCheck() does not detect it, because > events = POLLOUT | POLLERR and we get .revents = POLLHUP. > The (events & revents != 0) condition evaluates to false > - the code decides there is nothing to do and a new iteration starts" > > A similar issue in dbus code: > https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/526 > > @Antoine Maybe we should patch dbus too? > > OK? > > diff --git a/x11/qt6/qtbase/Makefile b/x11/qt6/qtbase/Makefile > index 3788dfa293f..9c7df648b55 100644 > --- a/x11/qt6/qtbase/Makefile > +++ b/x11/qt6/qtbase/Makefile > @@ -4,7 +4,7 @@ COMMENT-main = C++ general-purpose toolkit > COMMENT-global = global Qt6 documentation internals > COMMENT-mysql = MySQL plugin for Qt6 > COMMENT-psql = PostgresSQL plugin for Qt6 > -REVISION-main = 2 > +REVISION-main = 3 > > PKGSPEC-main = qt6-qtbase-${QT6_PKGSPEC} > > diff --git > a/x11/qt6/qtbase/patches/patch-src_corelib_kernel_qeventdispatcher_glib_cpp > b/x11/qt6/qtbase/patches/patch-src_corelib_kernel_qeventdispatcher_glib_cpp > new file mode 100644 > index 00000000000..45ee0cfff2d > --- /dev/null > +++ > b/x11/qt6/qtbase/patches/patch-src_corelib_kernel_qeventdispatcher_glib_cpp > @@ -0,0 +1,18 @@ > +https://codereview.qt-project.org/c/qt/qtbase/+/651677 > + > +Index: src/corelib/kernel/qeventdispatcher_glib.cpp > +--- src/corelib/kernel/qeventdispatcher_glib.cpp.orig > ++++ src/corelib/kernel/qeventdispatcher_glib.cpp > +@@ -434,10 +434,10 @@ void QEventDispatcherGlib::registerSocketNotifier(QSoc > + p->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR; > + break; > + case QSocketNotifier::Write: > +- p->pollfd.events = G_IO_OUT | G_IO_ERR; > ++ p->pollfd.events = G_IO_OUT | G_IO_HUP | G_IO_ERR; > + break; > + case QSocketNotifier::Exception: > +- p->pollfd.events = G_IO_PRI | G_IO_ERR; > ++ p->pollfd.events = G_IO_PRI | G_IO_HUP | G_IO_ERR; > + break; > + } > + p->socketNotifier = notifier; > diff --git > a/x11/qt6/qtbase/patches/patch-src_network_socket_qnativesocketengine_unix_cpp > > b/x11/qt6/qtbase/patches/patch-src_network_socket_qnativesocketengine_unix_cpp > new file mode 100644 > index 00000000000..20af6817dad > --- /dev/null > +++ > b/x11/qt6/qtbase/patches/patch-src_network_socket_qnativesocketengine_unix_cpp > @@ -0,0 +1,14 @@ > +https://codereview.qt-project.org/c/qt/qtbase/+/651677 > + > +Index: src/network/socket/qnativesocketengine_unix.cpp > +--- src/network/socket/qnativesocketengine_unix.cpp.orig > ++++ src/network/socket/qnativesocketengine_unix.cpp > +@@ -1379,7 +1379,7 @@ int QNativeSocketEnginePrivate::nativeSelect(QDeadline > + } > + > + static const short read_flags = POLLIN | POLLHUP | POLLERR; > +- static const short write_flags = POLLOUT | POLLERR; > ++ static const short write_flags = POLLOUT | POLLHUP | POLLERR; > + > + *selectForRead = ((pfd.revents & read_flags) != 0); > + *selectForWrite = ((pfd.revents & write_flags) != 0); >