File properly-lock-condvar-add-timeout-condition-to-prevent.patch of Package synergy

From 5a74c85e67c939d589f58064c9f094385dc41731 Mon Sep 17 00:00:00 2001
From: Nye Liu <nyet@nyet.org>
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) {
openSUSE Build Service is sponsored by