From mboxrd@z Thu Jan 1 00:00:00 1970 From: matthew.khouzam@gmail.com (Matthew Khouzam) Date: Fri, 1 Apr 2011 16:23:28 -0400 Subject: [ltt-dev] [PATCH] Only send the pids that are currently online in ustctl_get_online_pids(). Message-ID: <1301689408-8993-1-git-send-email-matthew.khouzam@ericsson.com> Signed-off-by: Matthew Khouzam --- libustctl/libustctl.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-) diff --git a/libustctl/libustctl.c b/libustctl/libustctl.c index d57e645..b5a214b 100644 --- a/libustctl/libustctl.c +++ b/libustctl/libustctl.c @@ -92,6 +92,8 @@ pid_t *ustctl_get_online_pids(void) { struct dirent *dirent; DIR *dir; + DIR *proc_dir; + char proc_dir_path[PATH_MAX]; unsigned int ret_size = 1 * sizeof(pid_t), i = 0; dir = opendir(SOCK_DIR); @@ -117,11 +119,27 @@ pid_t *ustctl_get_online_pids(void) * We need to figure out an intelligent way of solving * this, maybe connect-disconnect. */ - if (1) { + snprintf(proc_dir_path, PATH_MAX, "/proc/%u/", ret[i]); + proc_dir = opendir(proc_dir_path); + /* + * Note: + * We should not remove the empty dir in this pass. + * A process can die, a new process can be born and + * assigned to that PID. the only way to avoid this + * would be to de-register and register centrally. + * Ltt-sessiond would be a good candidate for such a + * location. + */ + if (proc_dir) { + /* We only needed to check if it's valid + * so we close it here + */ + closedir(proc_dir); ret_size += sizeof(pid_t); ret = (pid_t *) realloc(ret, ret_size); ++i; } + } } -- 1.7.0.4