From 65edbee7c8940db313544516950b88bb5381fa70 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 16 Jan 2013 10:47:35 +0100 Subject: [PATCH] nfs4: DirectoryCache::GetSnapshot may return NULL --- .../kernel/file_systems/nfs4/DirectoryCache.h | 14 +++++++++----- src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp | 8 ++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.h b/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.h index 7abefb7d91..357ec6e213 100644 --- a/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.h +++ b/src/add-ons/kernel/file_systems/nfs4/DirectoryCache.h @@ -54,7 +54,7 @@ public: bool created = false); void RemoveEntry(const char* name); - inline DirectoryCacheSnapshot* GetSnapshot(); + inline status_t GetSnapshot(DirectoryCacheSnapshot** snapshot); inline SinglyLinkedList& EntriesList(); @@ -113,12 +113,16 @@ DirectoryCache::Valid() } -inline DirectoryCacheSnapshot* -DirectoryCache::GetSnapshot() +inline status_t +DirectoryCache::GetSnapshot(DirectoryCacheSnapshot** snapshot) { + ASSERT(snapshot != NULL); + + status_t result = B_OK; if (fDirectoryCache == NULL) - _LoadSnapshot(false); - return fDirectoryCache; + result = _LoadSnapshot(false); + *snapshot = fDirectoryCache; + return result; } diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp index 10d2943a6c..1b3851704c 100644 --- a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp @@ -324,8 +324,12 @@ Inode::ReadDir(void* _buffer, uint32 size, uint32* _count, return result; } - DirectoryCacheSnapshot* snapshot = cache->GetSnapshot(); - ASSERT(snapshot != NULL); + DirectoryCacheSnapshot* snapshot; + result = cache->GetSnapshot(&snapshot); + if (result != B_OK) { + cache->Unlock(); + return result; + } cookie->fSnapshot = new DirectoryCacheSnapshot(*snapshot); cache->Unlock();