From b737d13bfa094cc914c024aaa1b12df19f00f65b Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 14 Feb 2008 19:20:32 +0000 Subject: [PATCH] DEVEL15-windows-vnovol-20080214 LICENSE MIT avoid a crash when logging VNOVOL errors returned from cm_CheckOfflineVolume (cherry picked from commit 1133cc441862f3f0d44f0ab380a7274ead672b0f) --- src/WINNT/afsd/cm_conn.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index 5f877f7fd..05498dd95 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -291,7 +291,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, else if (fidp->volume == volp->bk.ID) statep = &volp->bk; - if (statep->state != vl_offline) { + if (statep->state != vl_offline && statep->state != vl_unknown) { retry = 1; } else { if (cm_CheckOfflineVolume(volp, statep->ID)) @@ -323,7 +323,9 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, else if (fidp->volume == volp->bk.ID) statep = &volp->bk; - if (statep->state != vl_offline && statep->state != vl_busy) { + if (statep->state != vl_offline && + statep->state != vl_busy && + statep->state != vl_unknown) { retry = 1; } else { if (!serversp) { @@ -457,17 +459,19 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, break; } - /* Log server being offline for this volume */ - 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 && fidp) { + /* Log server being offline for this volume */ + 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)); - osi_Log2(afsd_logp, format, osi_LogSaveString(afsd_logp,addr), fidp->volume); + osi_Log2(afsd_logp, format, osi_LogSaveString(afsd_logp,addr), fidp->volume); #ifndef DJGPP - LogEvent(EVENTLOG_WARNING_TYPE, msgID, addr, fidp->volume); + LogEvent(EVENTLOG_WARNING_TYPE, msgID, addr, fidp->volume); #endif + } /* Mark server offline for this volume */ if (!serversp && fidp) { @@ -477,6 +481,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, free_svr_list = 1; } } + lock_ObtainWrite(&cm_serverLock); for (tsrp = serversp; tsrp; tsrp=tsrp->next) { if (tsrp->server == serverp) { -- 2.39.5