svn commit: r195981 - projects/libprocstat/usr.bin/fstat

Stanislav Sedov stas at FreeBSD.org
Thu Jul 30 21:00:21 UTC 2009


Author: stas
Date: Thu Jul 30 21:00:20 2009
New Revision: 195981
URL: http://svn.freebsd.org/changeset/base/195981

Log:
  - Add functions to free procstat-returned memory after usage.
  - Use these functions to free resources in fstat/fuser.

Modified:
  projects/libprocstat/usr.bin/fstat/fstat.c
  projects/libprocstat/usr.bin/fstat/fuser.c
  projects/libprocstat/usr.bin/fstat/libprocstat.c
  projects/libprocstat/usr.bin/fstat/libprocstat.h

Modified: projects/libprocstat/usr.bin/fstat/fstat.c
==============================================================================
--- projects/libprocstat/usr.bin/fstat/fstat.c	Thu Jul 30 20:50:56 2009	(r195980)
+++ projects/libprocstat/usr.bin/fstat/fstat.c	Thu Jul 30 21:00:20 2009	(r195981)
@@ -202,6 +202,7 @@ do_fstat(int argc, char **argv)
 		dofiles(procstat, &p[i]);
 	}
 	free(p);
+	procstat_freeprocs(procstat, p);
 	procstat_close(procstat);
 	return (0);
 }
@@ -224,6 +225,7 @@ dofiles(struct procstat *procstat, struc
 		return;
 	STAILQ_FOREACH(fst, head, next)
 		print_file_info(procstat, fst, uname, cmd, pid);
+	procstat_freefiles(procstat, head);
 }
 
 

Modified: projects/libprocstat/usr.bin/fstat/fuser.c
==============================================================================
--- projects/libprocstat/usr.bin/fstat/fuser.c	Thu Jul 30 20:50:56 2009	(r195980)
+++ projects/libprocstat/usr.bin/fstat/fuser.c	Thu Jul 30 21:00:20 2009	(r195981)
@@ -156,7 +156,6 @@ addfile(const char *path, struct reqfile
 	reqfile->name = path;
 	STAILQ_INIT(&reqfile->consumers);
 	return (0);	
-/* XXX: devs? */
 }
 
 int
@@ -279,8 +278,9 @@ do_fuser(int argc, char *argv[])
 		}
 		(void)fprintf(stderr, "\n");
 	}
+	procstat_freeprocs(procstat, p);
 	procstat_close(procstat);
-	/* XXX: free resoucres .*/
+	free(reqfiles);
 	return (0);
 }
 
@@ -350,7 +350,7 @@ dofiles(struct procstat *procstat, struc
 			STAILQ_INSERT_TAIL(&reqfiles[i].consumers, cons, next);
 		}
 	}
-	/* XXX: free head */
+	procstat_freefiles(procstat, head);
 }
 
 /*

Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c
==============================================================================
--- projects/libprocstat/usr.bin/fstat/libprocstat.c	Thu Jul 30 20:50:56 2009	(r195980)
+++ projects/libprocstat/usr.bin/fstat/libprocstat.c	Thu Jul 30 21:00:20 2009	(r195981)
@@ -226,6 +226,14 @@ fail:
 	return (NULL);
 }
 
+void
+procstat_freeprocs(struct procstat *procstat __unused, struct kinfo_proc *p)
+{
+
+	if (p != NULL)
+		free(p);
+}
+
 struct filestat_list *
 procstat_getfiles(struct procstat *procstat, struct kinfo_proc *kp, int mmapped)
 {
@@ -238,6 +246,20 @@ procstat_getfiles(struct procstat *procs
 		return (NULL);
 }
 
+void
+procstat_freefiles(struct procstat *procstat, struct filestat_list *head)
+{
+	struct filestat *fst, *tmp;
+
+	STAILQ_FOREACH_SAFE(fst, head, next, tmp) {
+		if (procstat->type == PROCSTAT_SYSCTL &&
+		    fst->fs_typedep != NULL)
+			free(fst->fs_typedep);
+		free(fst);
+	}
+	free(head);
+}
+
 static struct filestat *
 filestat_new_entry(void *typedep, int type, int fd, int fflags, int uflags)
 {

Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h
==============================================================================
--- projects/libprocstat/usr.bin/fstat/libprocstat.h	Thu Jul 30 20:50:56 2009	(r195980)
+++ projects/libprocstat/usr.bin/fstat/libprocstat.h	Thu Jul 30 21:00:20 2009	(r195981)
@@ -138,6 +138,9 @@ struct sockstat {
 STAILQ_HEAD(filestat_list, filestat);
 
 void	procstat_close(struct procstat *procstat);
+void	procstat_freeprocs(struct procstat *procstat, struct kinfo_proc *p);
+void	procstat_freefiles(struct procstat *procstat,
+    struct filestat_list *head);
 struct filestat_list	*procstat_getfiles(struct procstat *procstat,
     struct kinfo_proc *kp, int mmapped);
 struct kinfo_proc	*procstat_getprocs(struct procstat *procstat,


More information about the svn-src-projects mailing list