summaryrefslogtreecommitdiff
path: root/x11-misc/barrier/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2020-04-12 03:41:30 +0100
committerV3n3RiX <venerix@redcorelinux.org>2020-04-12 03:41:30 +0100
commit623ee73d661e5ed8475cb264511f683407d87365 (patch)
tree993eb27c93ec7a2d2d19550300d888fc1fed9e69 /x11-misc/barrier/files
parentceeeb463cc1eef97fd62eaee8bf2196ba04bc384 (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.patch132
-rw-r--r--x11-misc/barrier/files/barrier-2.3.2-no-avahi.patch25
-rw-r--r--x11-misc/barrier/files/barrier-2.3.2-pthread.patch115
-rw-r--r--x11-misc/barrier/files/barrier-2.3.2-qt-gui-only.patch45
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
+