diff options
author | Thomas Guillem <thomas@gllm.fr> | 2015-05-09 15:59:31 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-05-29 22:39:14 +0200 |
commit | 3436a646b5a2fc181056fa44989e17ff1f6b083c (patch) | |
tree | 655c789c2d6e7dd39b1d29db406ad6dd45ddb257 | |
parent | aed0af1e00b7d3f1bbe886a50cc140d01fc2bff8 (diff) | |
download | mpd-3436a646b5a2fc181056fa44989e17ff1f6b083c.tar.gz mpd-3436a646b5a2fc181056fa44989e17ff1f6b083c.tar.xz mpd-3436a646b5a2fc181056fa44989e17ff1f6b083c.zip |
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.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | src/storage/plugins/NfsStorage.cxx | 4 |
2 files changed, 4 insertions, 2 deletions
@@ -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); } } |