release-buffer-cache-lock-before-opening-file-20011009
[openafs.git] / src / afs / afs_buffer.c
index 45d2956..3fc6e4f 100644 (file)
@@ -232,17 +232,18 @@ char *DRead(fid,page)
       MReleaseWriteLock(&afs_bufferLock);
       return 0;
     }
+    MObtainWriteLock(&tb->lock,260);
+    MReleaseWriteLock(&afs_bufferLock);
+    tb->lockers++;
     tfile = afs_CFileOpen(fid[0]);
     sizep = (afs_int32 *)tfile;
     if (page * AFS_BUFFER_PAGESIZE >= *sizep) {
        dirp_Zap(tb->fid);
+       tb->lockers--;
+       MReleaseWriteLock(&tb->lock);
        afs_CFileClose(tfile);
-       MReleaseWriteLock(&afs_bufferLock);
        return 0;
     }
-    MObtainWriteLock(&tb->lock,260);
-    MReleaseWriteLock(&afs_bufferLock);
-    tb->lockers++;
     code = afs_CFileRead(tfile, tb->page * AFS_BUFFER_PAGESIZE,
                         tb->data, AFS_BUFFER_PAGESIZE);
     afs_CFileClose(tfile);
@@ -536,6 +537,6 @@ void shutdown_bufferpackage() {
       nbuffers = 0;
       timecounter = 1;
       for(i=0;i<PHSIZE;i++) phTable[i] = 0;
-      bzero((char *)&afs_bufferLock, sizeof(afs_lock_t));
+      memset((char *)&afs_bufferLock, 0, sizeof(afs_lock_t));
   }
 }