afs_inet_ntoa_r(tsp->addr.sin_addr.S_un.S_addr, hoststr);
lock_ReleaseMutex(&tsp->mx);
- code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &connp);
+ if (cm_noIPAddr > 0)
+ code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &connp);
+ else
+ code = RX_CALL_DEAD; /* No network */
if (code == 0) {
/* now call the appropriate ping call. Drop the timeout if
* the server is known to be down, so that we don't waste a
} /* 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;
lock_ReleaseMutex(&tsp->mx);
serversp[nconns] = tsp;
- code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &conns[nconns]);
+ if (cm_noIPAddr > 0)
+ code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &conns[nconns]);
+ else
+ code = RX_CALL_DEAD;
if (code) {
- lock_ObtainRead(&cm_serverLock);
- cm_PutServerNoLock(tsp);
+ if (code == RX_CALL_DEAD) {
+ lock_ObtainMutex(&tsp->mx);
+ cm_MarkServerDown(tsp, code, isDown);
+ lock_ReleaseMutex(&tsp->mx);
+ }
+ lock_ObtainRead(&cm_serverLock);
+ cm_PutServerNoLock(tsp);
continue;
}
lock_ObtainRead(&cm_serverLock);
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;
lock_ReleaseMutex(&tsp->mx);
serversp[nconns] = tsp;
- code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &conns[nconns]);
+ if (cm_noIPAddr > 0)
+ code = cm_ConnByServer(tsp, cm_rootUserp, FALSE, &conns[nconns]);
+ else
+ code = RX_CALL_DEAD;
if (code) {
- lock_ObtainRead(&cm_serverLock);
+ if (code == RX_CALL_DEAD) {
+ lock_ObtainMutex(&tsp->mx);
+ cm_MarkServerDown(tsp, code, isDown);
+ lock_ReleaseMutex(&tsp->mx);
+ }
+ lock_ObtainRead(&cm_serverLock);
cm_PutServerNoLock(tsp);
continue;
}
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;
return ( allDeleted ? CM_ERROR_EMPTY : 0 );
}
+void cm_AppendServerList(cm_serverRef_t *dest, cm_serverRef_t **src)
+{
+ cm_serverRef_t *ref;
+
+ if (dest == NULL || src == NULL || *src == NULL)
+ return;
+
+ for (ref = dest; ref->next != NULL; ref = ref->next);
+
+ ref->next = *src;
+
+ *src = NULL;
+}
+
void cm_FreeServerList(cm_serverRef_t** list, afs_uint32 flags)
{
cm_serverRef_t **current;