]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
Fix a memory leak in libxfs, were not freeing
authorEric Sandeen <sandeen@sgi.com>
Mon, 19 Jan 2004 22:29:50 +0000 (22:29 +0000)
committerEric Sandeen <sandeen@sgi.com>
Mon, 19 Jan 2004 22:29:50 +0000 (22:29 +0000)
allocated inode forks
prototype for new libxfs_idestroy_fork

include/libxfs.h
libxfs/rdwr.c
libxfs/xfs.h

index f61f1ef8fc63792e141fbd9ffda66742dbceeb1f..a069b0b0672538649bcc798f0084c6d123e3f448 100644 (file)
@@ -364,6 +364,7 @@ extern int  libxfs_inode_alloc (xfs_trans_t **, xfs_inode_t *, mode_t,
 extern void    libxfs_trans_inode_alloc_buf (xfs_trans_t *, xfs_buf_t *);
 
 extern void    libxfs_idata_realloc (xfs_inode_t *, int, int);
+extern void    libxfs_idestroy_fork (xfs_inode_t *, int);
 extern int     libxfs_iread (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
                                xfs_inode_t **, xfs_daddr_t);
 extern void    libxfs_ichgtime (xfs_inode_t *, int);
index ed71465410d8c4ea316e7401fdc410176823f337..f5d8e9630065d0c227d0a852114b4bbb23c5a5c0 100644 (file)
@@ -453,6 +453,20 @@ libxfs_iget(xfs_mount_t *mp, xfs_trans_t *tp, xfs_ino_t ino, uint lock_flags,
        return 0;
 }
 
+void
+libxfs_idestroy(xfs_inode_t *ip)
+{
+       switch (ip->i_d.di_mode & S_IFMT) {
+               case S_IFREG:
+               case S_IFDIR:
+               case S_IFLNK:
+                       libxfs_idestroy_fork(ip, XFS_DATA_FORK);
+                       break;
+       }
+       if (ip->i_afp)
+               libxfs_idestroy_fork(ip, XFS_ATTR_FORK);
+}
+
 void
 libxfs_iput(xfs_inode_t *ip, uint lock_flags)
 {
@@ -465,7 +479,7 @@ libxfs_iput(xfs_inode_t *ip, uint lock_flags)
                if (ip->i_itemp)
                        libxfs_zone_free(xfs_ili_zone, ip->i_itemp);
                ip->i_itemp = NULL;
-
+               libxfs_idestroy(ip);
                libxfs_zone_free(xfs_inode_zone, ip);
                ip = NULL;
        }
index f960a95a0faa7cf29ce588150b3fede606b2ada4..c169ef6f909c1629e9520216e41b524036ac7686 100644 (file)
 #define xfs_iread                      libxfs_iread
 #define xfs_ialloc                     libxfs_ialloc
 #define xfs_idata_realloc              libxfs_idata_realloc
+#define xfs_idestroy_fork              libxfs_idestroy_fork
 #define xfs_itobp                      libxfs_itobp
 #define xfs_ichgtime                   libxfs_ichgtime
 #define xfs_bmapi                      libxfs_bmapi