nfs4: Fix error handling issues in Inode::Open() and Inode::Create()
This fixes CID 991498.
This commit is contained in:
@@ -74,10 +74,15 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie,
|
|||||||
cookie->fMode = mode;
|
cookie->fMode = mode;
|
||||||
cookie->fLocks = NULL;
|
cookie->fLocks = NULL;
|
||||||
|
|
||||||
OpenState* state = new OpenState;
|
OpenState* state = new(std::nothrow) OpenState;
|
||||||
|
if (state == NULL)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
status_t result = CreateState(name, mode, perms, state, data);
|
status_t result = CreateState(name, mode, perms, state, data);
|
||||||
if (result != B_OK)
|
if (result != B_OK) {
|
||||||
|
delete state;
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
cookie->fOpenState = state;
|
cookie->fOpenState = state;
|
||||||
cookie->fFileSystem = fFileSystem;
|
cookie->fFileSystem = fFileSystem;
|
||||||
@@ -105,7 +110,7 @@ Inode::Open(int mode, OpenFileCookie* cookie)
|
|||||||
if (fOpenState == NULL) {
|
if (fOpenState == NULL) {
|
||||||
RevalidateFileCache();
|
RevalidateFileCache();
|
||||||
|
|
||||||
OpenState* state = new OpenState;
|
OpenState* state = new(std::nothrow) OpenState;
|
||||||
if (state == NULL)
|
if (state == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
@@ -113,8 +118,10 @@ Inode::Open(int mode, OpenFileCookie* cookie)
|
|||||||
state->fFileSystem = fFileSystem;
|
state->fFileSystem = fFileSystem;
|
||||||
state->fMode = mode & O_RWMASK;
|
state->fMode = mode & O_RWMASK;
|
||||||
status_t result = OpenFile(state, mode, &data);
|
status_t result = OpenFile(state, mode, &data);
|
||||||
if (result != B_OK)
|
if (result != B_OK) {
|
||||||
|
delete state;
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
fFileSystem->AddOpenFile(state);
|
fFileSystem->AddOpenFile(state);
|
||||||
fOpenState = state;
|
fOpenState = state;
|
||||||
|
|||||||
Reference in New Issue
Block a user