diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-04-12 03:41:30 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-04-12 03:41:30 +0100 |
commit | 623ee73d661e5ed8475cb264511f683407d87365 (patch) | |
tree | 993eb27c93ec7a2d2d19550300d888fc1fed9e69 /x11-misc/barrier/files | |
parent | ceeeb463cc1eef97fd62eaee8bf2196ba04bc384 (diff) |
gentoo Easter resync : 12.04.2020
Diffstat (limited to 'x11-misc/barrier/files')
-rw-r--r-- | x11-misc/barrier/files/barrier-2.3.2-inf-loop.patch | 132 | ||||
-rw-r--r-- | x11-misc/barrier/files/barrier-2.3.2-no-avahi.patch | 25 | ||||
-rw-r--r-- | x11-misc/barrier/files/barrier-2.3.2-pthread.patch | 115 | ||||
-rw-r--r-- | x11-misc/barrier/files/barrier-2.3.2-qt-gui-only.patch | 45 |
4 files changed, 317 insertions, 0 deletions
diff --git a/x11-misc/barrier/files/barrier-2.3.2-inf-loop.patch b/x11-misc/barrier/files/barrier-2.3.2-inf-loop.patch new file mode 100644 index 000000000000..125b903e58eb --- /dev/null +++ b/x11-misc/barrier/files/barrier-2.3.2-inf-loop.patch @@ -0,0 +1,132 @@ +From c79120c049d825fedeed70d5a1a9dc64d17ce9f0 Mon Sep 17 00:00:00 2001 +From: Vasily Galkin <galkin-vv@ya.ru> +Date: Sun, 9 Feb 2020 23:27:26 +0300 +Subject: [PATCH] Fix infinite loop on fast TCP disconnection + +The commit a841b28 changed the condition for removing job from processing. +New flag MultiplexerJobStatus::continue_servicing become used +instead of checking pointer for NULL. +However for cases when TCPSocket::newJob() returns nullptr +the behaviour changed: earlier the job was removed, but after change +it is called again, since MultiplexerJobStatus equal to {true, nullptr} +means "run this job again". + +This leads to problem with eating CPU and RAM on linux +https://github.com/debauchee/barrier/issues/470 + +There is similar windows problem, but not sure it is related. +https://github.com/debauchee/barrier/issues/552 + +Since it looks that the goal of a841b28 was only clarifying +object ownership and not changing job deletion behaviour, +this commit tries to get original behaviour and fix the bugs above +by returning {false, nullptr} instead of {true, nullptr} +when TCPSocket::newJob() returns nullptr. +--- + src/lib/net/SecureSocket.cpp | 4 ++-- + src/lib/net/TCPSocket.cpp | 25 +++++++++++++------------ + src/lib/net/TCPSocket.h | 3 ++- + 3 files changed, 17 insertions(+), 15 deletions(-) + +diff --git a/src/lib/net/SecureSocket.cpp b/src/lib/net/SecureSocket.cpp +index 99f626e8..92abea3c 100644 +--- a/src/lib/net/SecureSocket.cpp ++++ b/src/lib/net/SecureSocket.cpp +@@ -761,7 +761,7 @@ MultiplexerJobStatus SecureSocket::serviceConnect(ISocketMultiplexerJob* job, + // If status > 0, success + if (status > 0) { + sendEvent(m_events->forIDataSocket().secureConnected()); +- return {true, newJob()}; ++ return newJobOrStopServicing(); + } + + // Retry case +@@ -793,7 +793,7 @@ MultiplexerJobStatus SecureSocket::serviceAccept(ISocketMultiplexerJob* job, + // If status > 0, success + if (status > 0) { + sendEvent(m_events->forClientListener().accepted()); +- return {true, newJob()}; ++ return newJobOrStopServicing(); + } + + // Retry case +diff --git a/src/lib/net/TCPSocket.cpp b/src/lib/net/TCPSocket.cpp +index 4f4251ad..09a8f17e 100644 +--- a/src/lib/net/TCPSocket.cpp ++++ b/src/lib/net/TCPSocket.cpp +@@ -403,6 +403,15 @@ void TCPSocket::setJob(std::unique_ptr<ISocketMultiplexerJob>&& job) + } + } + ++MultiplexerJobStatus TCPSocket::newJobOrStopServicing() ++{ ++ auto new_job = newJob(); ++ if (new_job) ++ return {true, std::move(new_job)}; ++ else ++ return {false, {}}; ++} ++ + std::unique_ptr<ISocketMultiplexerJob> TCPSocket::newJob() + { + // note -- must have m_mutex locked on entry +@@ -519,22 +528,14 @@ MultiplexerJobStatus TCPSocket::serviceConnecting(ISocketMultiplexerJob* job, bo + catch (XArchNetwork& e) { + sendConnectionFailedEvent(e.what()); + onDisconnected(); +- auto new_job = newJob(); +- if (new_job) +- return {true, std::move(new_job)}; +- else +- return {false, {}}; ++ return newJobOrStopServicing(); + } + } + + if (write) { + sendEvent(m_events->forIDataSocket().connected()); + onConnected(); +- auto new_job = newJob(); +- if (new_job) +- return {true, std::move(new_job)}; +- else +- return {false, {}}; ++ return newJobOrStopServicing(); + } + + return {true, {}}; +@@ -548,7 +549,7 @@ MultiplexerJobStatus TCPSocket::serviceConnected(ISocketMultiplexerJob* job, + if (error) { + sendEvent(m_events->forISocket().disconnected()); + onDisconnected(); +- return {true, newJob()}; ++ return newJobOrStopServicing(); + } + + EJobResult writeResult = kRetry; +@@ -603,7 +604,7 @@ MultiplexerJobStatus TCPSocket::serviceConnected(ISocketMultiplexerJob* job, + if (writeResult == kBreak || readResult == kBreak) { + return {false, {}}; + } else if (writeResult == kNew || readResult == kNew) { +- return {true, newJob()}; ++ return newJobOrStopServicing(); + } else { + return {true, {}}; + } +diff --git a/src/lib/net/TCPSocket.h b/src/lib/net/TCPSocket.h +index 28891353..0b988886 100644 +--- a/src/lib/net/TCPSocket.h ++++ b/src/lib/net/TCPSocket.h +@@ -76,7 +76,8 @@ protected: + + void removeJob(); + void setJob(std::unique_ptr<ISocketMultiplexerJob>&& job); +- ++ MultiplexerJobStatus newJobOrStopServicing(); ++ + bool isReadable() { return m_readable; } + bool isWritable() { return m_writable; } + +-- +2.24.1 + diff --git a/x11-misc/barrier/files/barrier-2.3.2-no-avahi.patch b/x11-misc/barrier/files/barrier-2.3.2-no-avahi.patch new file mode 100644 index 000000000000..481a23a2d705 --- /dev/null +++ b/x11-misc/barrier/files/barrier-2.3.2-no-avahi.patch @@ -0,0 +1,25 @@ +From 93a4035409ed5a4349c9848c3dae3ec670884ee0 Mon Sep 17 00:00:00 2001 +From: Tetja Rediske <tetja+gitlab@tetja.de~> +Date: Sat, 19 Oct 2019 00:28:13 +0200 +Subject: [PATCH] make non-gui variants build without avahi + +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7f9efac8..8e10776e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -175,7 +175,7 @@ if (UNIX) + link_directories("/usr/X11R6/lib") + endif() + +- if (${PKG_CONFIG_FOUND}) ++ if (BARRIER_BUILD_GUI AND ${PKG_CONFIG_FOUND}) + pkg_check_modules (AVAHI_COMPAT REQUIRED avahi-compat-libdns_sd) + include_directories (BEFORE SYSTEM ${AVAHI_COMPAT_INCLUDE_DIRS}) + set (CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${AVAHI_COMPAT_INCLUDE_DIRS}") +-- +2.24.1 + diff --git a/x11-misc/barrier/files/barrier-2.3.2-pthread.patch b/x11-misc/barrier/files/barrier-2.3.2-pthread.patch new file mode 100644 index 000000000000..d29844843e45 --- /dev/null +++ b/x11-misc/barrier/files/barrier-2.3.2-pthread.patch @@ -0,0 +1,115 @@ +From a0b3124f80f5696cbf070b3b714533ab4012398d Mon Sep 17 00:00:00 2001 +From: James Le Cuirot <chewi@gentoo.org> +Date: Tue, 10 Mar 2020 21:10:48 +0000 +Subject: [PATCH] Use -pthread flag and simplify pthread build logic + +Sometimes -lpthread is not enough. This has caused build failures on +Gentoo Linux in the past. + +The logic also seems needlessly complex. We check for HAVE_PTHREAD on +UNIX platforms even though CMake errors out if pthreads are not +found. Similarly, we have a fallback for HAVE_PTHREAD_SIGNAL being +false even though we always set it to true. +--- + CMakeLists.txt | 11 ++++------- + res/config.h.in | 6 ------ + src/lib/arch/Arch.h | 4 +--- + src/lib/arch/unix/ArchMultithreadPosix.cpp | 13 ------------- + 4 files changed, 5 insertions(+), 29 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8e10776e..ae7ccb21 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -123,12 +123,10 @@ if (UNIX) + check_type_size (short SIZEOF_SHORT) + + # pthread is used on both Linux and Mac +- check_library_exists ("pthread" pthread_create "" HAVE_PTHREAD) +- if (HAVE_PTHREAD) +- list (APPEND libs pthread) +- else() +- message (FATAL_ERROR "Missing library: pthread") +- endif() ++ set (CMAKE_THREAD_PREFER_PTHREAD TRUE) ++ set (THREADS_PREFER_PTHREAD_FLAG TRUE) ++ find_package (Threads REQUIRED) ++ list (APPEND libs Threads::Threads) + + # curl is used on both Linux and Mac + find_package (CURL) +@@ -269,7 +267,6 @@ if (UNIX) + set (HAVE_CXX_EXCEPTIONS 1) + set (HAVE_CXX_MUTABLE 1) + set (HAVE_CXX_STDLIB 1) +- set (HAVE_PTHREAD_SIGNAL 1) + set (SELECT_TYPE_ARG1 int) + set (SELECT_TYPE_ARG234 " (fd_set *)") + set (SELECT_TYPE_ARG5 " (struct timeval *)") +diff --git a/res/config.h.in b/res/config.h.in +index f3a72449..2bd3b3bf 100644 +--- a/res/config.h.in ++++ b/res/config.h.in +@@ -55,12 +55,6 @@ + /* Define if you have a POSIX `sigwait` function. */ + #cmakedefine HAVE_POSIX_SIGWAIT ${HAVE_POSIX_SIGWAIT} + +-/* Define if you have POSIX threads libraries and header files. */ +-#cmakedefine HAVE_PTHREAD ${HAVE_PTHREAD} +- +-/* Define if you have `pthread_sigmask` and `pthread_kill` functions. */ +-#cmakedefine HAVE_PTHREAD_SIGNAL ${HAVE_PTHREAD_SIGNAL} +- + /* Define if your compiler defines socklen_t. */ + #cmakedefine HAVE_SOCKLEN_T ${HAVE_SOCKLEN_T} + +diff --git a/src/lib/arch/Arch.h b/src/lib/arch/Arch.h +index c062d6f3..940a2e3a 100644 +--- a/src/lib/arch/Arch.h ++++ b/src/lib/arch/Arch.h +@@ -54,9 +54,7 @@ + # include "arch/unix/ArchConsoleUnix.h" + # include "arch/unix/ArchDaemonUnix.h" + # include "arch/unix/ArchLogUnix.h" +-# if HAVE_PTHREAD +-# include "arch/unix/ArchMultithreadPosix.h" +-# endif ++# include "arch/unix/ArchMultithreadPosix.h" + # include "arch/unix/ArchNetworkBSD.h" + # include "arch/unix/ArchSleepUnix.h" + # include "arch/unix/ArchStringUnix.h" +diff --git a/src/lib/arch/unix/ArchMultithreadPosix.cpp b/src/lib/arch/unix/ArchMultithreadPosix.cpp +index c9ddc6ce..4866edce 100644 +--- a/src/lib/arch/unix/ArchMultithreadPosix.cpp ++++ b/src/lib/arch/unix/ArchMultithreadPosix.cpp +@@ -36,17 +36,6 @@ + + #define SIGWAKEUP SIGUSR1 + +-#if !HAVE_PTHREAD_SIGNAL +- // boy, is this platform broken. forget about pthread signal +- // handling and let signals through to every process. barrier +- // will not terminate cleanly when it gets SIGTERM or SIGINT. +-# define pthread_sigmask sigprocmask +-# define pthread_kill(tid_, sig_) kill(0, (sig_)) +-# define sigwait(set_, sig_) +-# undef HAVE_POSIX_SIGWAIT +-# define HAVE_POSIX_SIGWAIT 1 +-#endif +- + static + void + setSignalSet(sigset_t* sigset) +@@ -344,9 +333,7 @@ ArchMultithreadPosix::newThread(ThreadFunc func, void* data) + // can't tell the difference. + if (!m_newThreadCalled) { + m_newThreadCalled = true; +-#if HAVE_PTHREAD_SIGNAL + startSignalHandler(); +-#endif + } + + // note that the child thread will wait until we release this mutex +-- +2.24.1 + diff --git a/x11-misc/barrier/files/barrier-2.3.2-qt-gui-only.patch b/x11-misc/barrier/files/barrier-2.3.2-qt-gui-only.patch new file mode 100644 index 000000000000..bcfe31386103 --- /dev/null +++ b/x11-misc/barrier/files/barrier-2.3.2-qt-gui-only.patch @@ -0,0 +1,45 @@ +From af0ce63733e040d6220aaa2157190015d4a9b0fd Mon Sep 17 00:00:00 2001 +From: James Le Cuirot <chewi@gentoo.org> +Date: Tue, 17 Mar 2020 22:45:20 +0000 +Subject: [PATCH] Only require Qt5 when building the GUI + +Commit 6c888437 made Qt5 mandatory for all builds when it is only +required for the GUI. There's already a find_package call in src/gui, +it just needed the REQUIRED flag to be added. +--- + CMakeLists.txt | 6 ------ + src/gui/CMakeLists.txt | 2 +- + 2 files changed, 1 insertion(+), 7 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8e10776e..ee0835ec 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -357,12 +357,6 @@ else() + set (OPENSSL_LIBS ${lib_ssl} ${lib_crypto}) + endif() + +- +-# Check we have the *required* Qt5 libs. +-find_package(Qt5Core REQUIRED) +-find_package(Qt5Network REQUIRED) +-find_package(Qt5Widgets REQUIRED) +- + # + # Configure_file... but for directories, recursively. + # +diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt +index 4988fe6a..f29fd910 100644 +--- a/src/gui/CMakeLists.txt ++++ b/src/gui/CMakeLists.txt +@@ -1,6 +1,6 @@ + cmake_minimum_required (VERSION 3.4) + +-find_package (Qt5 COMPONENTS Core Widgets Network) ++find_package (Qt5 REQUIRED COMPONENTS Core Widgets Network) + set (CMAKE_AUTOMOC ON) + set (CMAKE_AUTORCC ON) + set (CMAKE_AUTOUIC ON) +-- +2.25.1 + |