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