Hello community, here is the log from the commit of package synergy for openSUSE:Factory checked in at 2015-09-08 17:42:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/synergy (Old) and /work/SRC/openSUSE:Factory/.synergy.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "synergy" Changes: -------- --- /work/SRC/openSUSE:Factory/synergy/synergy.changes 2015-08-19 09:29:16.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.synergy.new/synergy.changes 2015-09-08 17:46:52.000000000 +0200 @@ -1,0 +2,30 @@ +Fri Sep 4 15:34:37 UTC 2015 - [email protected] + +- make clipboard and selection work reliably again + (bnc#944514, synergy #4735) + fix-bug-4735-don-t-leave-until-fillclipboard-s-all.patch + properly-lock-condvar-add-timeout-condition-to-prevent.patch + +------------------------------------------------------------------- +Thu Sep 3 12:30:24 UTC 2015 - [email protected] + +- Update to 1.7.4 + * Bug #4721 - High CPU usage for Windows service + * Bug #4750 - SSL connect error 'passive ssl error limit' + * Bug #4584 - Drag and drop with SSL causes crash + * Bug #4749 - Clipboard thread race condition causes assertion + failure + * Bug #4720 - Plugin download shows 'Could not get Linux package + type' error + * Bug #4712 - Unable to send clipboard with size above 1KB when + using SSL + * Bug #4642 - Connecting causes SSL23_GET_SERVER_HELLO error + * Bug #4690 - Log line 'activeDesktop' does not use logging + system + * Bug #4866 - Wrong ns plugin version can be loaded + * Enhancement #4901 - Auto restart when running from GUI in + desktop mode + * Enhancement #4845 - Add timestamp to log output +- Enable building for SLE-12 + +------------------------------------------------------------------- Old: ---- v1.7.3-stable.tar.gz New: ---- fix-bug-4735-don-t-leave-until-fillclipboard-s-all.patch properly-lock-condvar-add-timeout-condition-to-prevent.patch v1.7.4-stable.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ synergy.spec ++++++ --- /var/tmp/diff_new_pack.n2Gd1f/_old 2015-09-08 17:47:22.000000000 +0200 +++ /var/tmp/diff_new_pack.n2Gd1f/_new 2015-09-08 17:47:22.000000000 +0200 @@ -17,7 +17,7 @@ Name: synergy -Version: 1.7.3 +Version: 1.7.4 Release: 0 Summary: Mouse, keyboard and clipboard sharing utility License: GPL-2.0+ @@ -33,22 +33,26 @@ Patch11: synergy-1.5.0-pthread.patch Patch13: synergy-1.5.0-test.patch Patch14: synergy-1.5.0-disable-version-check.patch +Patch15: fix-bug-4735-don-t-leave-until-fillclipboard-s-all.patch +Patch16: properly-lock-condvar-add-timeout-condition-to-prevent.patch BuildRequires: avahi-devel BuildRequires: cmake BuildRequires: curl-devel BuildRequires: gcc-c++ -BuildRequires: libcryptopp-devel BuildRequires: libqt4-devel BuildRequires: mDNSResponder-devel BuildRequires: systemd BuildRequires: update-desktop-files BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xtst) -%{?systemd_requires} -BuildRoot: %{_tmppath}/%{name}-%{version}-build +%if 0%{?suse_version} != 1315 +BuildRequires: libcryptopp-devel Requires(pre): %fillup_prereq Provides: synergy-plus = %{version} Obsoletes: synergy-plus < %{version} +BuildRoot: %{_tmppath}/%{name}-%{version}-build +%endif +%{?systemd_requires} %description Synergy lets you easily share a single mouse and keyboard between @@ -79,6 +83,8 @@ %patch11 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 +%patch16 -p1 cp %{SOURCE2} . @@ -128,7 +134,7 @@ %suse_update_desktop_file -i q%{name} %post -%{fillup_only} +%fillup_only %desktop_database_post %service_add_post synergys.service synergys.socket @@ -150,8 +156,8 @@ %{_bindir}/synergys %{_bindir}/syntool %config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/synergy -%doc %{_mandir}/man1/synergys.1%{?ext_man} -%doc %{_mandir}/man1/synergyc.1%{?ext_man} +%{_mandir}/man1/synergys.1%{?ext_man} +%{_mandir}/man1/synergyc.1%{?ext_man} %{_unitdir}/synergys.service %{_unitdir}/synergys.socket %{_sbindir}/rcsynergys ++++++ fix-bug-4735-don-t-leave-until-fillclipboard-s-all.patch ++++++ >From 32ad85706878a92f5964847b1d88752fb5685303 Mon Sep 17 00:00:00 2001 From: Nye Liu <[email protected]> Date: Tue, 1 Sep 2015 17:39:25 -0700 Subject: [PATCH] Fix bug #4735 - don't leave() until fillClipboard()s all complete --- src/lib/client/Client.cpp | 66 ++++++++++++++++++++++++++++++++++------------- src/lib/client/Client.h | 9 +++++-- 2 files changed, 55 insertions(+), 20 deletions(-) Index: synergy-1.7.4-stable/src/lib/client/Client.cpp =================================================================== --- synergy-1.7.4-stable.orig/src/lib/client/Client.cpp +++ synergy-1.7.4-stable/src/lib/client/Client.cpp @@ -21,7 +21,6 @@ #include "../plugin/ns/SecureSocket.h" #include "client/ServerProxy.h" #include "synergy/Screen.h" -#include "synergy/Clipboard.h" #include "synergy/FileChunk.h" #include "synergy/DropHelper.h" #include "synergy/PacketStreamFilter.h" @@ -75,7 +74,10 @@ Client::Client( m_socket(NULL), m_useSecureNetwork(false), m_args(args), - m_sendClipboardThread(NULL) + m_sendClipboardThread(NULL), + m_mutex(NULL), + m_condData(false), + m_condVar(NULL) { assert(m_socketFactory != NULL); assert(m_screen != NULL); @@ -107,6 +109,8 @@ Client::Client( LOG((CLOG_NOTE "crypto disabled because of ns plugin not available")); } } + m_mutex = new Mutex(); + m_condVar = new CondVar<bool>(m_mutex, m_condData); } Client::~Client() @@ -125,6 +129,8 @@ Client::~Client() cleanupConnecting(); cleanupConnection(); delete m_socketFactory; + delete m_condVar; + delete m_mutex; } void @@ -262,8 +268,6 @@ Client::enter(SInt32 xAbs, SInt32 yAbs, bool Client::leave() { - m_screen->leave(); - m_active = false; if (m_sendClipboardThread != NULL) { @@ -272,11 +276,17 @@ Client::leave() m_sendClipboardThread = NULL; } + m_condData = false; m_sendClipboardThread = new Thread( new TMethodJob<Client>( this, &Client::sendClipboardThread, NULL)); + // Bug #4735 - we can't leave() until fillClipboard()s all finish + while (!m_condData) + m_condVar->wait(); + + m_screen->leave(); if (!m_receivedFileData.empty()) { m_receivedFileData.clear(); @@ -382,9 +392,20 @@ Client::getName() const } void -Client::sendClipboard(ClipboardID id) +Client::fillClipboard(ClipboardID id, Clipboard *clipboard) +{ + assert(m_screen != NULL); + assert(m_server != NULL); + + if (clipboard->open(m_timeClipboard[id])) { + clipboard->close(); + } + m_screen->getClipboard(id, clipboard); +} + +void +Client::sendClipboard(ClipboardID id, Clipboard *clipboard) { - // note -- m_mutex must be locked on entry assert(m_screen != NULL); assert(m_server != NULL); @@ -392,26 +413,21 @@ Client::sendClipboard(ClipboardID id) // clipboard time before getting the data from the screen // as the screen may detect an unchanged clipboard and // avoid copying the data. - Clipboard clipboard; - if (clipboard.open(m_timeClipboard[id])) { - clipboard.close(); - } - m_screen->getClipboard(id, &clipboard); // check time if (m_timeClipboard[id] == 0 || - clipboard.getTime() != m_timeClipboard[id]) { + clipboard->getTime() != m_timeClipboard[id]) { // save new time - m_timeClipboard[id] = clipboard.getTime(); + m_timeClipboard[id] = clipboard->getTime(); // marshall the data - String data = clipboard.marshall(); + String data = clipboard->marshall(); // save and send data if different or not yet sent if (!m_sentClipboard[id] || data != m_dataClipboard[id]) { m_sentClipboard[id] = true; m_dataClipboard[id] = data; - m_server->onClipboardChanged(id, &clipboard); + m_server->onClipboardChanged(id, clipboard); } } } @@ -673,8 +689,10 @@ Client::handleClipboardGrabbed(const Eve // if we're not the active screen then send the clipboard now, // otherwise we'll wait until we leave. + Clipboard clipboard; if (!m_active) { - sendClipboard(info->m_id); + fillClipboard(info->m_id, &clipboard); + sendClipboard(info->m_id, &clipboard); } } @@ -762,12 +780,24 @@ Client::onFileRecieveCompleted() } void -Client::sendClipboardThread(void*) +Client::sendClipboardThread(void * data) { + Clipboard clipboard[kClipboardEnd]; + // fill clipboards that we own and that have changed + for (ClipboardID id = 0; id < kClipboardEnd; ++id) { + if (m_ownClipboard[id]) { + fillClipboard(id, &clipboard[id]); + } + } + + // signal that fill is done + m_condData = true; + m_condVar->signal(); + // send clipboards that we own and that have changed for (ClipboardID id = 0; id < kClipboardEnd; ++id) { if (m_ownClipboard[id]) { - sendClipboard(id); + sendClipboard(id, &clipboard[id]); } } Index: synergy-1.7.4-stable/src/lib/client/Client.h =================================================================== --- synergy-1.7.4-stable.orig/src/lib/client/Client.h +++ synergy-1.7.4-stable/src/lib/client/Client.h @@ -20,12 +20,13 @@ #include "synergy/IClient.h" -#include "synergy/IClipboard.h" +#include "synergy/Clipboard.h" #include "synergy/DragInformation.h" #include "synergy/INode.h" #include "synergy/ClientArgs.h" #include "net/NetworkAddress.h" #include "base/EventTypes.h" +#include "mt/CondVar.h" class EventQueueTimer; namespace synergy { class Screen; } @@ -162,7 +163,8 @@ public: virtual String getName() const; private: - void sendClipboard(ClipboardID); + void fillClipboard(ClipboardID, Clipboard*); + void sendClipboard(ClipboardID, Clipboard*); void sendEvent(Event::Type, void*); void sendConnectionFailedEvent(const char* msg); void sendFileChunk(const void* data); @@ -223,4 +225,7 @@ private: bool m_useSecureNetwork; ClientArgs& m_args; Thread* m_sendClipboardThread; + Mutex* m_mutex; + bool m_condData; + CondVar<bool>* m_condVar; }; ++++++ properly-lock-condvar-add-timeout-condition-to-prevent.patch ++++++ >From 5a74c85e67c939d589f58064c9f094385dc41731 Mon Sep 17 00:00:00 2001 From: Nye Liu <[email protected]> Date: Thu, 3 Sep 2015 12:09:35 -0700 Subject: [PATCH] Properly lock condVar, add timeout condition to prevent infinite loop when waiting for fillClipboard() to finish --- src/lib/client/Client.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) Index: synergy-1.7.4-stable/src/lib/client/Client.cpp =================================================================== --- synergy-1.7.4-stable.orig/src/lib/client/Client.cpp +++ synergy-1.7.4-stable/src/lib/client/Client.cpp @@ -283,8 +283,16 @@ Client::leave() &Client::sendClipboardThread, NULL)); // Bug #4735 - we can't leave() until fillClipboard()s all finish - while (!m_condData) - m_condVar->wait(); + Stopwatch timer(true); + m_mutex->lock(); + while (!m_condData) { + m_condVar->wait(timer, 0.5); + if (timer.getTime()>0.5) { + LOG((CLOG_DEBUG "timed out waiting for clipboard fill")); + break; + } + } + m_mutex->unlock(); m_screen->leave(); @@ -791,8 +799,10 @@ Client::sendClipboardThread(void * data) } // signal that fill is done + m_mutex->lock(); m_condData = true; m_condVar->signal(); + m_mutex->unlock(); // send clipboards that we own and that have changed for (ClipboardID id = 0; id < kClipboardEnd; ++id) { ++++++ synergy-1.5.0-disable-version-check.patch ++++++ --- /var/tmp/diff_new_pack.n2Gd1f/_old 2015-09-08 17:47:22.000000000 +0200 +++ /var/tmp/diff_new_pack.n2Gd1f/_new 2015-09-08 17:47:22.000000000 +0200 @@ -1,8 +1,8 @@ -Index: synergy-1.7.3-stable/src/gui/src/MainWindow.cpp +Index: synergy-1.7.4-stable/src/gui/src/MainWindow.cpp =================================================================== ---- synergy-1.7.3-stable.orig/src/gui/src/MainWindow.cpp -+++ synergy-1.7.3-stable/src/gui/src/MainWindow.cpp -@@ -165,7 +165,7 @@ void MainWindow::open() +--- synergy-1.7.4-stable.orig/src/gui/src/MainWindow.cpp ++++ synergy-1.7.4-stable/src/gui/src/MainWindow.cpp +@@ -168,7 +168,7 @@ void MainWindow::open() showNormal(); } ++++++ synergy-1.5.0-pthread.patch ++++++ --- /var/tmp/diff_new_pack.n2Gd1f/_old 2015-09-08 17:47:22.000000000 +0200 +++ /var/tmp/diff_new_pack.n2Gd1f/_new 2015-09-08 17:47:22.000000000 +0200 @@ -1,8 +1,8 @@ -Index: synergy-1.7.3-stable/CMakeLists.txt +Index: synergy-1.7.4-stable/CMakeLists.txt =================================================================== ---- synergy-1.7.3-stable.orig/CMakeLists.txt -+++ synergy-1.7.3-stable/CMakeLists.txt -@@ -152,6 +152,8 @@ if (UNIX) +--- synergy-1.7.4-stable.orig/CMakeLists.txt ++++ synergy-1.7.4-stable/CMakeLists.txt +@@ -151,6 +151,8 @@ if (UNIX) check_library_exists("pthread" pthread_create "" HAVE_PTHREAD) if (HAVE_PTHREAD) list(APPEND libs pthread) ++++++ synergy-1.5.0-test.patch ++++++ --- /var/tmp/diff_new_pack.n2Gd1f/_old 2015-09-08 17:47:22.000000000 +0200 +++ /var/tmp/diff_new_pack.n2Gd1f/_new 2015-09-08 17:47:22.000000000 +0200 @@ -1,7 +1,7 @@ -Index: synergy-1.7.3-stable/src/CMakeLists.txt +Index: synergy-1.7.4-stable/src/CMakeLists.txt =================================================================== ---- synergy-1.7.3-stable.orig/src/CMakeLists.txt -+++ synergy-1.7.3-stable/src/CMakeLists.txt +--- synergy-1.7.4-stable.orig/src/CMakeLists.txt ++++ synergy-1.7.4-stable/src/CMakeLists.txt @@ -18,6 +18,6 @@ add_subdirectory(lib) add_subdirectory(cmd) add_subdirectory(micro) @@ -10,10 +10,10 @@ +if (${WITH_GENTOO_TEST} MATCHES "ON") add_subdirectory(test) endif() -Index: synergy-1.7.3-stable/src/test/CMakeLists.txt +Index: synergy-1.7.4-stable/src/test/CMakeLists.txt =================================================================== ---- synergy-1.7.3-stable.orig/src/test/CMakeLists.txt -+++ synergy-1.7.3-stable/src/test/CMakeLists.txt +--- synergy-1.7.4-stable.orig/src/test/CMakeLists.txt ++++ synergy-1.7.4-stable/src/test/CMakeLists.txt @@ -14,20 +14,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++ v1.7.3-stable.tar.gz -> v1.7.4-stable.tar.gz ++++++ /work/SRC/openSUSE:Factory/synergy/v1.7.3-stable.tar.gz /work/SRC/openSUSE:Factory/.synergy.new/v1.7.4-stable.tar.gz differ: char 13, line 1
