nfs4: Check for semaphore creation errors in ConnectionBase classes
This commit is contained in:
@@ -79,7 +79,8 @@ CacheRevalidator::_DirectoryCacheRevalidator()
|
|||||||
B_RELATIVE_TIMEOUT, DirectoryCache::kExpirationTime);
|
B_RELATIVE_TIMEOUT, DirectoryCache::kExpirationTime);
|
||||||
|
|
||||||
if (result != B_TIMED_OUT) {
|
if (result != B_TIMED_OUT) {
|
||||||
release_sem(fWaitCancel);
|
if (result == B_OK)
|
||||||
|
release_sem(fWaitCancel);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@@ -95,7 +96,8 @@ CacheRevalidator::_DirectoryCacheRevalidator()
|
|||||||
status_t result = acquire_sem_etc(fWaitCancel, 1,
|
status_t result = acquire_sem_etc(fWaitCancel, 1,
|
||||||
B_ABSOLUTE_TIMEOUT, current->ExpireTime());
|
B_ABSOLUTE_TIMEOUT, current->ExpireTime());
|
||||||
if (result != B_TIMED_OUT) {
|
if (result != B_TIMED_OUT) {
|
||||||
release_sem(fWaitCancel);
|
if (result == B_OK)
|
||||||
|
release_sem(fWaitCancel);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -476,7 +476,14 @@ Connection::Connect(Connection **_connection, const PeerAddress& address)
|
|||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
status_t result = conn->Connect();
|
status_t result;
|
||||||
|
if (conn->fWaitCancel < B_OK) {
|
||||||
|
result = conn->fWaitCancel;
|
||||||
|
delete conn;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = conn->Connect();
|
||||||
if (result != B_OK) {
|
if (result != B_OK) {
|
||||||
delete conn;
|
delete conn;
|
||||||
return result;
|
return result;
|
||||||
@@ -495,6 +502,14 @@ Connection::SetTo(Connection **_connection, int socket,
|
|||||||
Connection* conn = CreateObject(address);
|
Connection* conn = CreateObject(address);
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
status_t result;
|
||||||
|
if (conn->fWaitCancel < B_OK) {
|
||||||
|
result = conn->fWaitCancel;
|
||||||
|
delete conn;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
conn->fSocket = socket;
|
conn->fSocket = socket;
|
||||||
|
|
||||||
*_connection = conn;
|
*_connection = conn;
|
||||||
@@ -642,6 +657,14 @@ ConnectionListener::Listen(ConnectionListener** listener, uint16 port)
|
|||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t result;
|
||||||
|
if ((*listener)->fWaitCancel < B_OK) {
|
||||||
|
result = (*listener)->fWaitCancel;
|
||||||
|
close(sock);
|
||||||
|
delete *listener;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
(*listener)->fSocket = sock;
|
(*listener)->fSocket = sock;
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|||||||
@@ -41,7 +41,9 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
|
|||||||
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else if ((cookie->fMode & O_NONBLOCK) == 0) {
|
}
|
||||||
|
|
||||||
|
if ((cookie->fMode & O_NONBLOCK) == 0) {
|
||||||
status_t result = acquire_sem_etc(cookie->fSnoozeCancel, 1,
|
status_t result = acquire_sem_etc(cookie->fSnoozeCancel, 1,
|
||||||
B_RELATIVE_TIMEOUT, sSecToBigTime(5));
|
B_RELATIVE_TIMEOUT, sSecToBigTime(5));
|
||||||
|
|
||||||
@@ -49,7 +51,8 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
|
|||||||
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
||||||
|
|
||||||
if (result != B_TIMED_OUT) {
|
if (result != B_TIMED_OUT) {
|
||||||
release_sem(cookie->fSnoozeCancel);
|
if (result == B_OK)
|
||||||
|
release_sem(cookie->fSnoozeCancel);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -71,7 +74,9 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
|
|||||||
if (sequence != NULL)
|
if (sequence != NULL)
|
||||||
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
||||||
return true;
|
return true;
|
||||||
} else if ((cookie->fMode & O_NONBLOCK) == 0) {
|
}
|
||||||
|
|
||||||
|
if ((cookie->fMode & O_NONBLOCK) == 0) {
|
||||||
status_t result = acquire_sem_etc(cookie->fSnoozeCancel, 1,
|
status_t result = acquire_sem_etc(cookie->fSnoozeCancel, 1,
|
||||||
B_RELATIVE_TIMEOUT, sSecToBigTime(leaseTime) / 3);
|
B_RELATIVE_TIMEOUT, sSecToBigTime(leaseTime) / 3);
|
||||||
|
|
||||||
@@ -79,7 +84,8 @@ NFS4Object::HandleErrors(uint32 nfs4Error, RPC::Server* serv,
|
|||||||
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
*sequence = fFileSystem->OpenOwnerSequenceLock();
|
||||||
|
|
||||||
if (result != B_TIMED_OUT) {
|
if (result != B_TIMED_OUT) {
|
||||||
release_sem(cookie->fSnoozeCancel);
|
if (result == B_OK)
|
||||||
|
release_sem(cookie->fSnoozeCancel);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -231,7 +231,8 @@ NFS4Server::_Renewal()
|
|||||||
status_t result = acquire_sem_etc(fWaitCancel, 1,
|
status_t result = acquire_sem_etc(fWaitCancel, 1,
|
||||||
B_RELATIVE_TIMEOUT, sSecToBigTime(fLeaseTime - 2));
|
B_RELATIVE_TIMEOUT, sSecToBigTime(fLeaseTime - 2));
|
||||||
if (result != B_TIMED_OUT) {
|
if (result != B_TIMED_OUT) {
|
||||||
release_sem(fWaitCancel);
|
if (result == B_OK)
|
||||||
|
release_sem(fWaitCancel);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ Server::_StartListening()
|
|||||||
fThreadCancel = false;
|
fThreadCancel = false;
|
||||||
fThreadError = B_OK;
|
fThreadError = B_OK;
|
||||||
fThread = spawn_kernel_thread(&Server::_ListenerThreadStart,
|
fThread = spawn_kernel_thread(&Server::_ListenerThreadStart,
|
||||||
"NFSv4 Listener", B_NORMAL_PRIORITY, this);
|
"NFSv4 Listener", B_NORMAL_PRIORITY, this);
|
||||||
if (fThread < B_OK)
|
if (fThread < B_OK)
|
||||||
return fThread;
|
return fThread;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user