lib/nfs/FileReader: set `state=IDLE` before invoking callback

Fixes assertion failure if the callback fails.
This commit is contained in:
Max Kellermann 2020-04-23 14:51:09 +02:00
parent 0a92fbc18e
commit 159389164a
2 changed files with 6 additions and 2 deletions

2
NEWS
View File

@ -4,6 +4,8 @@ ver 0.21.23 (not yet released)
* storage * storage
- curl: fix corrupt "href" values in the presence of XML entities - curl: fix corrupt "href" values in the presence of XML entities
- curl: unescape "href" values - curl: unescape "href" values
* input
- nfs: fix crash bug
* decoder * decoder
- gme: adapt to API change in the upcoming version 0.7.0 - gme: adapt to API change in the upcoming version 0.7.0
* output * output

View File

@ -186,6 +186,8 @@ NfsFileReader::OpenCallback(nfsfh *_fh) noexcept
fh = _fh; fh = _fh;
state = State::IDLE;
try { try {
connection->Stat(fh, *this); connection->Stat(fh, *this);
} catch (...) { } catch (...) {
@ -204,13 +206,13 @@ NfsFileReader::StatCallback(const struct stat *st) noexcept
assert(fh != nullptr); assert(fh != nullptr);
assert(st != nullptr); assert(st != nullptr);
state = State::IDLE;
if (!S_ISREG(st->st_mode)) { if (!S_ISREG(st->st_mode)) {
OnNfsFileError(std::make_exception_ptr(std::runtime_error("Not a regular file"))); OnNfsFileError(std::make_exception_ptr(std::runtime_error("Not a regular file")));
return; return;
} }
state = State::IDLE;
OnNfsFileOpen(st->st_size); OnNfsFileOpen(st->st_size);
} }