free memory on sleep error
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 19 Mar 1992 03:12:28 +0000 (19:12 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 19 Mar 1992 03:12:28 +0000 (19:12 -0800)
SCCS-vsn: sys/ufs/lfs/lfs_segment.c 7.15

usr/src/sys/ufs/lfs/lfs_segment.c

index d4960f5..bd87546 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)lfs_segment.c       7.14 (Berkeley) %G%
+ *     @(#)lfs_segment.c       7.15 (Berkeley) %G%
  */
 
 #include <sys/param.h>
  */
 
 #include <sys/param.h>
@@ -142,11 +142,18 @@ lfs_vflush(vp)
         */
        s = splbio();
        if (--fs->lfs_iocount && (error =
         */
        s = splbio();
        if (--fs->lfs_iocount && (error =
-           tsleep(&fs->lfs_iocount, PRIBIO + 1, "lfs vflush", 0)))
+           tsleep(&fs->lfs_iocount, PRIBIO + 1, "lfs vflush", 0))) {
+               free(sp->bpp, M_SEGMENT);
+               free(sp, M_SEGMENT);
                return (error);
                return (error);
+       }
        splx(s);
        vfs_unbusy(mp);
 
        splx(s);
        vfs_unbusy(mp);
 
+       /*
+        * XXX
+        * Should be writing a checkpoint?
+        */
        free(sp->bpp, M_SEGMENT);
        free(sp, M_SEGMENT);
 
        free(sp->bpp, M_SEGMENT);
        free(sp, M_SEGMENT);
 
@@ -252,8 +259,11 @@ printf("lfs_segment: failed to get vnode (tell Keith)!\n");
        --fs->lfs_iocount;
        if (do_ckp) {
                if (fs->lfs_iocount && (error =
        --fs->lfs_iocount;
        if (do_ckp) {
                if (fs->lfs_iocount && (error =
-                   tsleep(&fs->lfs_iocount, PRIBIO + 1, "lfs sync", 0)))
+                   tsleep(&fs->lfs_iocount, PRIBIO + 1, "lfs sync", 0))) {
+                       free(sp->bpp, M_SEGMENT);
+                       free(sp, M_SEGMENT);
                        return (error);
                        return (error);
+               }
                splx(s);
                lfs_writesuper(fs, sp);
        } else 
                splx(s);
                lfs_writesuper(fs, sp);
        } else