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 /src/storage/plugins | |
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.
Diffstat (limited to 'src/storage/plugins')
-rw-r--r-- | src/storage/plugins/NfsStorage.cxx | 4 |
1 files changed, 2 insertions, 2 deletions
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); } } |