cm_req_t req;
lock_ObtainMutex(&tsp->mx);
- if (tsp->flags & CM_SERVERFLAG_PINGING) {
+ if (InterlockedIncrement(&tsp->pingCount) > 1) {
tsp->waitCount++;
osi_SleepM((LONG_PTR)tsp, &tsp->mx);
lock_ObtainMutex(&tsp->mx);
- tsp->waitCount--;
- if (tsp->waitCount == 0)
- _InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_PINGING);
- else
+ InterlockedDecrement(&tsp->pingCount);
+ if (--tsp->waitCount > 0)
osi_Wakeup((LONG_PTR)tsp);
lock_ReleaseMutex(&tsp->mx);
return;
}
- _InterlockedOr(&tsp->flags, CM_SERVERFLAG_PINGING);
wasDown = tsp->flags & CM_SERVERFLAG_DOWN;
afs_inet_ntoa_r(tsp->addr.sin_addr.S_un.S_addr, hoststr);
lock_ReleaseMutex(&tsp->mx);
} /* got an unauthenticated connection to this server */
lock_ObtainMutex(&tsp->mx);
- if (code >= 0 || code == RXGEN_OPCODE || code == RX_CALL_BUSY) {
+ if (code >= 0 || code == RXGEN_OPCODE) {
/* mark server as up */
_InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_DOWN);
tsp->downTime = 0;
/* we currently handle 32-bits of capabilities */
- if (code != RXGEN_OPCODE && code != RX_CALL_BUSY &&
- caps.Capabilities_len > 0) {
+ if (code != RXGEN_OPCODE && caps.Capabilities_len > 0) {
tsp->capabilities = caps.Capabilities_val[0];
xdr_free((xdrproc_t) xdr_Capabilities, &caps);
caps.Capabilities_len = 0;
tsp->capabilities);
}
- if (tsp->waitCount == 0)
- _InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_PINGING);
- else
+ InterlockedDecrement(&tsp->pingCount);
+ if (tsp->waitCount > 0)
osi_Wakeup((LONG_PTR)tsp);
lock_ReleaseMutex(&tsp->mx);
}
lock_ObtainMutex(&tsp->mx);
isDown = tsp->flags & CM_SERVERFLAG_DOWN;
- if ((tsp->flags & CM_SERVERFLAG_PINGING) ||
+ if (tsp->pingCount > 0 ||
!((isDown && (flags & CM_FLAG_CHECKDOWNSERVERS)) ||
(!isDown && (flags & CM_FLAG_CHECKUPSERVERS)))) {
lock_ReleaseMutex(&tsp->mx);
continue;
}
- _InterlockedOr(&tsp->flags, CM_SERVERFLAG_PINGING);
+ InterlockedIncrement(&tsp->pingCount);
lock_ReleaseMutex(&tsp->mx);
serversp[nconns] = tsp;
lock_ObtainMutex(&tsp->mx);
wasDown = tsp->flags & CM_SERVERFLAG_DOWN;
- if (results[i] >= 0 || results[i] == RXGEN_OPCODE ||
- results[i] == RX_CALL_BUSY) {
+ if (results[i] >= 0 || results[i] == RXGEN_OPCODE) {
/* mark server as up */
_InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_DOWN);
tsp->downTime = 0;
/* we currently handle 32-bits of capabilities */
- if (results[i] != RXGEN_OPCODE && results[i] != RX_CALL_BUSY &&
- caps[i].Capabilities_len > 0) {
+ if (results[i] != RXGEN_OPCODE && caps[i].Capabilities_len > 0) {
tsp->capabilities = caps[i].Capabilities_val[0];
xdr_free((xdrproc_t) xdr_Capabilities, &caps[i]);
caps[i].Capabilities_len = 0;
tsp->capabilities);
}
- if (tsp->waitCount == 0)
- _InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_PINGING);
- else
+ InterlockedDecrement(&tsp->pingCount);
+ if (tsp->waitCount > 0)
osi_Wakeup((LONG_PTR)tsp);
lock_ReleaseMutex(&tsp->mx);
lock_ObtainMutex(&tsp->mx);
isDown = tsp->flags & CM_SERVERFLAG_DOWN;
- if ((tsp->flags & CM_SERVERFLAG_PINGING) ||
+ if (tsp->pingCount > 0 ||
!((isDown && (flags & CM_FLAG_CHECKDOWNSERVERS)) ||
(!isDown && (flags & CM_FLAG_CHECKUPSERVERS)))) {
lock_ReleaseMutex(&tsp->mx);
continue;
}
- _InterlockedOr(&tsp->flags, CM_SERVERFLAG_PINGING);
+ InterlockedIncrement(&tsp->pingCount);
lock_ReleaseMutex(&tsp->mx);
serversp[nconns] = tsp;
lock_ObtainMutex(&tsp->mx);
wasDown = tsp->flags & CM_SERVERFLAG_DOWN;
- if (results[i] >= 0 || results[i] == RX_CALL_BUSY) {
+ if (results[i] >= 0) {
/* mark server as up */
_InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_DOWN);
tsp->downTime = 0;
tsp->capabilities);
}
- if (tsp->waitCount == 0)
- _InterlockedAnd(&tsp->flags, ~CM_SERVERFLAG_PINGING);
- else
+ InterlockedDecrement(&tsp->pingCount);
+ if (tsp->waitCount > 0)
osi_Wakeup((LONG_PTR)tsp);
lock_ReleaseMutex(&tsp->mx);
sprintf(output,
"%s - tsp=0x%p cell=%s addr=%-15s port=%u uuid=%s type=%s caps=0x%x "
- "flags=0x%x waitCount=%u rank=%u downTime=\"%s\" refCount=%u\r\n",
+ "flags=0x%x waitCount=%u pingCount=%d rank=%u downTime=\"%s\" "
+ "refCount=%u\r\n",
cookie, tsp, tsp->cellp ? tsp->cellp->name : "", hoststr,
ntohs(tsp->addr.sin_port), uuidstr, type,
- tsp->capabilities, tsp->flags, tsp->waitCount, tsp->activeRank,
+ tsp->capabilities, tsp->flags, tsp->waitCount, tsp->pingCount,
+ tsp->activeRank,
(tsp->flags & CM_SERVERFLAG_DOWN) ? "down" : "up",
tsp->refCount);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);