Merged update from upstream sources

This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/qt5-qtbase.git#6f0b990f87a72e843560c3aa414a0e337f0527b3
This commit is contained in:
DistroBaker 2020-11-04 19:06:15 +00:00
parent f7f2ac5682
commit 57e5cd0b06
2 changed files with 80 additions and 1 deletions

View File

@ -49,7 +49,7 @@ BuildRequires: pkgconfig(libsystemd)
Name: qt5-qtbase Name: qt5-qtbase
Summary: Qt5 - QtBase components Summary: Qt5 - QtBase components
Version: 5.15.1 Version: 5.15.1
Release: 6%{?dist} Release: 7%{?dist}
# See LGPL_EXCEPTIONS.txt, for exception details # See LGPL_EXCEPTIONS.txt, for exception details
License: LGPLv2 with exceptions or GPLv3 with exceptions License: LGPLv2 with exceptions or GPLv3 with exceptions
@ -129,6 +129,8 @@ Patch90: %{name}-gcc11.patch
## upstream patches ## upstream patches
Patch100: qtbase-emit-qscreen-geometry-changed-when-logical-dpi-changes.patch Patch100: qtbase-emit-qscreen-geometry-changed-when-logical-dpi-changes.patch
Patch101: qtbase-QTBUG-86319.patch
# Do not check any files in %%{_qt5_plugindir}/platformthemes/ for requires. # Do not check any files in %%{_qt5_plugindir}/platformthemes/ for requires.
# Those themes are there for platform integration. If the required libraries are # Those themes are there for platform integration. If the required libraries are
# not there, the platform to integrate with isn't either. Then Qt will just # not there, the platform to integrate with isn't either. Then Qt will just
@ -389,6 +391,7 @@ Qt5 libraries used for drawing widgets and OpenGL items.
## upstream patches ## upstream patches
%patch100 -p1 -b .emit-qscreen-geometry-changed-when-logical-dpi-changes %patch100 -p1 -b .emit-qscreen-geometry-changed-when-logical-dpi-changes
%patch101 -p1
# move some bundled libs to ensure they're not accidentally used # move some bundled libs to ensure they're not accidentally used
pushd src/3rdparty pushd src/3rdparty
@ -1046,6 +1049,9 @@ fi
%changelog %changelog
* Tue Nov 03 2020 Sandro Mani <manisandro@gmail.com> - 5.15.1-7
- Backport upstream fix for QTBUG-86319
* Sun Oct 18 2020 Jeff Law <law@redhat.com> - 5.15.1-6 * Sun Oct 18 2020 Jeff Law <law@redhat.com> - 5.15.1-6
- Fix missing #includes for gcc-11 - Fix missing #includes for gcc-11

73
qtbase-QTBUG-86319.patch Normal file
View File

@ -0,0 +1,73 @@
From a82032351c921c3d5d57122aca57b47f83f9b9d1 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Thu, 10 Sep 2020 13:30:59 -0700
Subject: [PATCH] forkfd/Linux: ask clone() to use the SIGCHLD as the
termination signal
Because of these lines in the Linux kernel (kernel/fork.c, see [1][3]):
if (clone_flags & CLONE_VFORK)
trace = PTRACE_EVENT_VFORK;
else if (args->exit_signal != SIGCHLD)
trace = PTRACE_EVENT_CLONE;
else
trace = PTRACE_EVENT_FORK;
Without CLONE_VFORK (which we can't use), if the exit signal isn't
SIGCHLD, the debugger will get a PTRACE_EVENT_CLONE, which makes it
think the process we're starting is a thread, not a new process. Both
gdb and lldb remain attached to the child and when it later performs an
execve(), they get mightily confused. See gdb bug report[5].
The idea of not having an exit_signal was so that no SIGCHLD would be
delivered to the parent process in the first place. That way, some
misguided SIGCHLD handler (*cough* GLib *cough*) wouldn't reap our
processes. Unfortunately, what I didn't realize was that the kernel
sends SIGCHLD anyway (see [2][4]), so this defensive measure didn't
actually work. Consequently, we can pass SIGCHLD to clone() and get the
debuggers working again.
[ChangeLog][Linux] Fixed an issue that would cause debugging a Qt
application that uses QProcess to confuse both gdb and lldb if
the Linux kernel was version 5.4 or higher. Behavior outside of
a debugging session was not affected.
[1] https://code.woboq.org/linux/linux/kernel/fork.c.html#_do_fork
[2] https://code.woboq.org/linux/linux/kernel/signal.c.html#do_notify_parent
[3] https://elixir.bootlin.com/linux/v5.8/source/kernel/fork.c#L2432
[4] https://elixir.bootlin.com/linux/v5.8/source/kernel/signal.c#L1925
[5] https://sourceware.org/bugzilla/show_bug.cgi?id=26562
Fixes: QTBUG-86319
Change-Id: I2fc68c725ba649218bd9fffd1633863613537d42
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: hjk <hjk@qt.io>
(cherry picked from commit d1fc991c6e3c45a5f93c925d49e3fe77ce6ce455)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
---
src/3rdparty/forkfd/forkfd_linux.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/3rdparty/forkfd/forkfd_linux.c b/src/3rdparty/forkfd/forkfd_linux.c
index 523fbca3ccc..ffe0e9a5e24 100644
--- a/src/3rdparty/forkfd/forkfd_linux.c
+++ b/src/3rdparty/forkfd/forkfd_linux.c
@@ -147,7 +147,7 @@ int system_forkfd(int flags, pid_t *ppid, int *system)
}
*system = 1;
- unsigned long cloneflags = CLONE_PIDFD;
+ unsigned long cloneflags = CLONE_PIDFD | SIGCHLD;
pid = sys_clone(cloneflags, &pidfd);
if (ppid)
*ppid = pid;
@@ -171,7 +171,7 @@ int system_forkfd_wait(int ffd, struct forkfd_info *info, int ffdoptions, struct
{
siginfo_t si;
int ret;
- int options = __WALL | convertForkfdWaitFlagsToWaitFlags(ffdoptions);
+ int options = convertForkfdWaitFlagsToWaitFlags(ffdoptions);
if ((options & WNOHANG) == 0) {
/* check if the file descriptor is non-blocking */