diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/storage/StorageState.cxx | 12 |
2 files changed, 15 insertions, 0 deletions
@@ -1,4 +1,7 @@ ver 0.20.15 (not yet released) +* state file + - make mount point restore errors non-fatal + - fix crash when restoring mounts with incompatible database plugin ver 0.20.14 (2018/01/01) * database diff --git a/src/storage/StorageState.cxx b/src/storage/StorageState.cxx index f6d93c2f0..1eedda89f 100644 --- a/src/storage/StorageState.cxx +++ b/src/storage/StorageState.cxx @@ -48,6 +48,9 @@ static constexpr Domain storage_domain("storage"); void storage_state_save(BufferedOutputStream &os, const Instance &instance) { + if (instance.storage == nullptr) + return; + const auto visitor = [&os](const char *mount_uri, const Storage &storage) { std::string uri = storage.MapUTF8(""); if (uri.empty() || StringIsEmpty(mount_uri)) @@ -85,6 +88,12 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance) FormatError(storage_domain, "Unrecognized line in mountpoint state: %s", line); } + if (instance.storage == nullptr) + /* without storage (a CompositeStorage instance), we + cannot mount, and therefore we silently ignore the + state file */ + return true; + if (url.empty() || uri.empty()) { LogError(storage_domain, "Missing value in mountpoint state."); return true; @@ -120,6 +129,9 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance) unsigned storage_state_get_hash(const Instance &instance) { + if (instance.storage == nullptr) + return 0; + std::set<std::string> mounts; const auto visitor = [&mounts](const char *mount_uri, const Storage &storage) { |