From 862bdf3d26ac8fd61c7f7f6664bf0999774be434 Mon Sep 17 00:00:00 2001 From: Jeremie Koenig Date: Wed, 25 Aug 2010 14:31:56 +0200 Subject: libps (_proc_stat_free): Fix memory leak The thread_waits field was never freed; this change adds the code to do so if the corresponding flag is set. Users are also warned of the consequences, namely, that they should not free process proc_stats before all their associated thread ones are gone, since the latter may reference the former's thread_waits field. However, with the normal interface (ie. ps_context_free), all proc_stats are freed at once, so this is not an issue. * libps/procstat.c (_proc_stat_free): Free ps->thread_waits if PSTAT_THREAD_WAITS flag is set. * libps/ps.h (_proc_stat_free): Document that thread proc_stats must be freed before process proc_stat can be. --- libps/ps.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libps/ps.h') diff --git a/libps/ps.h b/libps/ps.h index 27f2e787..23e2cc3e 100644 --- a/libps/ps.h +++ b/libps/ps.h @@ -454,7 +454,9 @@ error_t _proc_stat_create (pid_t pid, struct ps_context *context, /* Frees PS and any memory/ports it references. Users shouldn't use this routine; proc_stats are normally freed only when their ps_context goes - away. */ + away. Insubordinate users will make sure they free the thread proc_stats + before they free the corresponding process proc_stat since the thread_wait + fields of the former may reference the latter. */ void _proc_stat_free (struct proc_stat *ps); /* Adds FLAGS to PS's flags, fetching information as necessary to validate -- cgit v1.2.3