From: Peter Somogyi Date: Thu, 7 Sep 2006 02:09:30 +0000 (+0000) Subject: DEVEL15-vol-voffline-avoid-early-freevolumeheader-20050906 X-Git-Tag: openafs-devel-1_5_8 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e5d1185852fa7e8fa5a15a9fecdf57b259a570ba;p=packages%2Fo%2Fopenafs.git DEVEL15-vol-voffline-avoid-early-freevolumeheader-20050906 FIXES 39422 don't free vp before we finish using it (cherry picked from commit e7ec36ddeb0973c71514463862ad90d42f9b009c) --- diff --git a/src/vol/volume.c b/src/vol/volume.c index 3bd020a20..e3513fcce 100644 --- a/src/vol/volume.c +++ b/src/vol/volume.c @@ -3367,9 +3367,6 @@ VCheckOffline(register Volume * vp) VUpdateVolume_r(&error, vp, 0); VCloseVolumeHandles_r(vp); - /* invalidate the volume header cache entry */ - FreeVolumeHeader(vp); - if (LogLevel) { Log("VOffline: Volume %u (%s) is now offline", V_id(vp), V_name(vp)); @@ -3378,12 +3375,16 @@ VCheckOffline(register Volume * vp) Log("\n"); } + /* invalidate the volume header cache entry */ + FreeVolumeHeader(vp); + /* if nothing changed state to error or salvaging, * drop state to unattached */ if (!IsErrorState(V_attachState(vp))) { VChangeState_r(vp, VOL_STATE_UNATTACHED); } VCancelReservation_r(vp); + /* no usage of vp is safe beyond this point */ } return ret; } @@ -3403,7 +3404,6 @@ VCheckOffline(register Volume * vp) V_inUse(vp) = 0; VUpdateVolume_r(&error, vp, 0); VCloseVolumeHandles_r(vp); - FreeVolumeHeader(vp); if (LogLevel) { Log("VOffline: Volume %u (%s) is now offline", V_id(vp), V_name(vp)); @@ -3411,6 +3411,7 @@ VCheckOffline(register Volume * vp) Log(" (%s)", V_offlineMessage(vp)); Log("\n"); } + FreeVolumeHeader(vp); #ifdef AFS_PTHREAD_ENV assert(pthread_cond_broadcast(&vol_put_volume_cond) == 0); #else /* AFS_PTHREAD_ENV */