From 3436a646b5a2fc181056fa44989e17ff1f6b083c Mon Sep 17 00:00:00 2001
From: Thomas Guillem <thomas@gllm.fr>
Date: Sat, 9 May 2015 15:59:31 +0200
Subject: storage/nfs: fix deadlock when connecting

The Connect method can be called between Schedule and lock. In that case, when
locked, the state is already set to CONNECTING of READY and the condition won't
be signaled anymore.
---
 src/storage/plugins/NfsStorage.cxx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/storage/plugins')

diff --git a/src/storage/plugins/NfsStorage.cxx b/src/storage/plugins/NfsStorage.cxx
index 324b40b6f..a1f079e2c 100644
--- a/src/storage/plugins/NfsStorage.cxx
+++ b/src/storage/plugins/NfsStorage.cxx
@@ -177,6 +177,8 @@ private:
 				mutex.unlock();
 				DeferredMonitor::Schedule();
 				mutex.lock();
+				if (state == State::INITIAL)
+					cond.wait(mutex);
 				break;
 
 			case State::CONNECTING:
@@ -188,8 +190,6 @@ private:
 				error.Set(last_error);
 				return false;
 			}
-
-			cond.wait(mutex);
 		}
 	}
 
-- 
cgit v1.2.3