else if (errorCode == VNOVOL || errorCode == VMOVED || errorCode == VOFFLINE ||
errorCode == VSALVAGE || errorCode == VNOSERVICE || errorCode == VIO)
{
- char addr[16];
char *format;
DWORD msgID;
}
else if (errorCode >= -64 && errorCode < 0) {
/* mark server as down */
- sprintf(addr, "%d.%d.%d.%d",
- ((serverp->addr.sin_addr.s_addr & 0xff)),
- ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
- ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
- ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
+ if (serverp)
+ sprintf(addr, "%d.%d.%d.%d",
+ ((serverp->addr.sin_addr.s_addr & 0xff)),
+ ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
+ ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
+ ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
if (errorCode == RX_CALL_DEAD)
osi_Log2(afsd_logp, "cm_Analyze: Rx Call Dead addr[%s] forcedNew[%s]",
osi_LogSaveString(afsd_logp,addr),
(reqp->flags & CM_REQ_NEW_CONN_FORCED ? "yes" : "no"));
- lock_ObtainMutex(&serverp->mx);
- if (errorCode != RX_CALL_DEAD ||
- (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
- if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
- serverp->flags |= CM_SERVERFLAG_DOWN;
- serverp->downTime = time(NULL);
+ if (serverp) {
+ lock_ObtainMutex(&serverp->mx);
+ if (errorCode == RX_CALL_DEAD &&
+ (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
+ if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
+ serverp->flags |= CM_SERVERFLAG_DOWN;
+ serverp->downTime = time(NULL);
+ }
+ } else {
+ if (reqp->flags & CM_REQ_NEW_CONN_FORCED) {
+ reqp->tokenIdleErrorServp = serverp;
+ reqp->tokenError = errorCode;
+ } else {
+ reqp->flags |= CM_REQ_NEW_CONN_FORCED;
+ forcing_new = 1;
+ }
}
- } else {
- reqp->flags |= CM_REQ_NEW_CONN_FORCED;
- forcing_new = 1;
- }
- lock_ReleaseMutex(&serverp->mx);
- cm_ForceNewConnections(serverp);
+ lock_ReleaseMutex(&serverp->mx);
+ cm_ForceNewConnections(serverp);
+ }
if ( timeLeft > 2 )
retry = 1;
}