From 9ca65531e0ed9916b9fd94c8b9fd9a41a0559d6a Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Fri, 1 Apr 2011 09:00:21 +0000 Subject: [PATCH] * fhandler_proc.cc (format_proc_loadavg): Add running/total processes as fourth component of output. * fhandler_process.cc (get_process_state): Make non-static. Add FIXME about generating an 'O' flag. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/fhandler_proc.cc | 16 ++++++++++++++-- winsup/cygwin/fhandler_process.cc | 6 +++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 37b560ea3..9e7d53fad 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2011-04-01 Yaakov Selkowitz + + * fhandler_proc.cc (format_proc_loadavg): Add running/total + processes as fourth component of output. + * fhandler_process.cc (get_process_state): Make non-static. + Add FIXME about generating an 'O' flag. + 2011-04-01 Corinna Vinschen * fhandler_random.cc (fhandler_dev_random::crypt_gen_random): diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc index a6636ae90..6ae7d807d 100644 --- a/winsup/cygwin/fhandler_proc.cc +++ b/winsup/cygwin/fhandler_proc.cc @@ -374,9 +374,21 @@ format_proc_version (void *, char *&destbuf) static _off64_t format_proc_loadavg (void *, char *&destbuf) { + extern int get_process_state (DWORD dwProcessId); + unsigned running = 0; + winpids pids ((DWORD) 0); + + for (unsigned i = 0; i < pids.npids; i++) + switch (get_process_state (i)) { + case 'O': + case 'R': + running++; + break; + } + destbuf = (char *) crealloc_abort (destbuf, 16); - return __small_sprintf (destbuf, "%u.%02u %u.%02u %u.%02u\n", - 0, 0, 0, 0, 0, 0); + return __small_sprintf (destbuf, "%u.%02u %u.%02u %u.%02u %u/%u\n", + 0, 0, 0, 0, 0, 0, running, pids.npids); } static _off64_t diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 526cd3322..80ca6573f 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -79,8 +79,7 @@ static const virt_tab_t process_tab[] = static const int PROCESS_LINK_COUNT = (sizeof (process_tab) / sizeof (virt_tab_t)) - 1; - -static int get_process_state (DWORD dwProcessId); +int get_process_state (DWORD dwProcessId); static bool get_mem_values (DWORD dwProcessId, unsigned long *vmsize, unsigned long *vmrss, unsigned long *vmtext, unsigned long *vmdata, unsigned long *vmlib, @@ -928,7 +927,7 @@ format_process_mounts (void *data, char *&destbuf) return len; } -static int +int get_process_state (DWORD dwProcessId) { /* @@ -975,6 +974,7 @@ get_process_state (DWORD dwProcessId) state = 'S'; for (unsigned i = 0; i < sp->ThreadCount; i++) { + /* FIXME: at some point we should consider generating 'O' */ if (st->State == StateRunning || st->State == StateReady) {