Fix race in dir_reopen().
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 19 May 2006 02:45:13 +0000 (02:45 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 19 May 2006 02:45:13 +0000 (02:45 +0000)
Thanks to Godmar Back for pointing this out (twice).

solutions/p4.patch

index 9e11e251463505459c8bb2df0a4dbd5d0b7f83b5..7ab00465335901ee873027211780765bd3555582 100644 (file)
@@ -726,7 +726,7 @@ diff -u src/filesys/directory.c~ src/filesys/directory.c
    return dir != NULL;
  }
  
-@@ -61,22 +99,34 @@ dir_open_root (struct dir **dirp)
+@@ -61,22 +99,36 @@ dir_open_root (struct dir **dirp)
    return dir_open (inode_open (ROOT_DIR_SECTOR), dirp);
  }
  
@@ -734,7 +734,9 @@ diff -u src/filesys/directory.c~ src/filesys/directory.c
 +bool
 +dir_reopen (struct dir *dir)
 +{
++  lock_acquire (&dir->dir_lock);
 +  dir->open_cnt++;
++  lock_release (&dir->dir_lock);
 +  return true;
 +}
 +