From 3436a646b5a2fc181056fa44989e17ff1f6b083c Mon Sep 17 00:00:00 2001 From: Thomas Guillem Date: Sat, 9 May 2015 15:59:31 +0200 Subject: [PATCH] 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. --- NEWS | 2 ++ src/storage/plugins/NfsStorage.cxx | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 493177025..e5cc2e540 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ ver 0.19.10 (not yet released) - smbclient: fix DFF playback * encoder - opus: fix bogus granulepos +* neighbor + - nfs: fix deadlock when connecting ver 0.19.9 (2015/02/06) * decoder 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); } }