]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-vol-voffline-avoid-early-freevolumeheader-20050906 openafs-devel-1_5_8
authorPeter Somogyi <psomogyi@gamax.hu>
Thu, 7 Sep 2006 02:09:30 +0000 (02:09 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 7 Sep 2006 02:09:30 +0000 (02:09 +0000)
FIXES 39422

don't free vp before we finish using it

(cherry picked from commit e7ec36ddeb0973c71514463862ad90d42f9b009c)

src/vol/volume.c

index 3bd020a200af1ca032f072824091586fe57631db..e3513fcce23fecf23709adfca282b072c469fd92 100644 (file)
@@ -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 */