From 2d96a2b3038c96550dc94f43c7cc8f2ad06944ab Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Tue, 8 Jan 2013 23:46:04 +0100 Subject: [PATCH] nfs4: Minor improvements to memory deallocation in few places --- src/add-ons/kernel/file_systems/nfs4/Connection.cpp | 12 +++++------- src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp | 7 +++---- src/add-ons/kernel/file_systems/nfs4/IdMap.cpp | 9 ++++----- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp index e38953a3db..371cc395a6 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Connection.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Connection.cpp @@ -411,6 +411,7 @@ ConnectionStream::Receive(void** _buffer, uint32* _size) return B_NO_MEMORY; } else buffer = ptr; + MemoryDeleter bufferDeleter(buffer); received = 0; do { @@ -418,15 +419,12 @@ ConnectionStream::Receive(void** _buffer, uint32* _size) record_size - received, 0); received += result; } while (result > 0 && received < record_size); - if (result < 0) { - result = errno; - free(buffer); - return result; - } else if (result == 0) { - free(buffer); + if (result < 0) + return errno; + else if (result == 0) return ECONNABORTED; - } + bufferDeleter.Detach(); size += record_size; } while (!last_one); diff --git a/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp b/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp index 1a1edf33d0..6a208c1d9a 100644 --- a/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/FileInfo.cpp @@ -58,6 +58,8 @@ FileInfo::CreateName(const char* dirPath, const char* name) if (fName == NULL) return B_NO_MEMORY; + free(const_cast(fPath)); + fPath = NULL; if (dirPath != NULL) { char* path = reinterpret_cast(malloc(strlen(name) + 2 + strlen(dirPath))); @@ -68,12 +70,9 @@ FileInfo::CreateName(const char* dirPath, const char* name) strcat(path, "/"); strcat(path, name); - free(const_cast(fPath)); fPath = path; - } else { - free(const_cast(fPath)); + } else fPath = strdup(name); - } if (fPath == NULL) return B_NO_MEMORY; diff --git a/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp b/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp index 146b07767c..a779469eb7 100644 --- a/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/IdMap.cpp @@ -9,6 +9,7 @@ #include "IdMap.h" +#include #include #include #include @@ -122,21 +123,19 @@ IdMap::_GetBuffer(T value, int32 code) void* buffer = malloc(size); if (buffer == NULL) return NULL; + MemoryDeleter bufferDeleter(buffer); size = read_port(fReplyPort, &code, buffer, size); if (size < B_OK) { - free(buffer); - if (_Repair() != B_OK) return 0; continue; } - if (code != MsgReply) { - free(buffer); + if (code != MsgReply) return NULL; - } + bufferDeleter.Detach(); return buffer; } while (true); }