From 40dd968f1302da9fa65c53ba0ae0e6a12c7cda9b Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Tue, 25 Nov 2014 13:03:09 +0100
Subject: lib/nfs/FileReader: update "state" in OnNfsError()

Clean up the "state" to indicate that there is no longer any
asynchronous operation.  Fixes another NFS-related crash due to
cleanup of a non-existing asynchronous operation.
---
 src/lib/nfs/FileReader.cxx | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

(limited to 'src/lib')

diff --git a/src/lib/nfs/FileReader.cxx b/src/lib/nfs/FileReader.cxx
index 4837e1f0e..7f5506d50 100644
--- a/src/lib/nfs/FileReader.cxx
+++ b/src/lib/nfs/FileReader.cxx
@@ -246,6 +246,30 @@ NfsFileReader::OnNfsCallback(unsigned status, void *data)
 void
 NfsFileReader::OnNfsError(Error &&error)
 {
+	switch (state) {
+	case State::INITIAL:
+	case State::DEFER:
+	case State::MOUNT:
+	case State::IDLE:
+		assert(false);
+		gcc_unreachable();
+
+	case State::OPEN:
+		connection->RemoveLease(*this);
+		state = State::INITIAL;
+		break;
+
+	case State::STAT:
+		connection->RemoveLease(*this);
+		connection->Close(fh);
+		state = State::INITIAL;
+		break;
+
+	case State::READ:
+		state = State::IDLE;
+		break;
+	}
+
 	OnNfsFileError(std::move(error));
 }
 
-- 
cgit v1.2.3