This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.14-38-g84e2a55
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 22 Jun 2011 14:33:00 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.14-38-g84e2a55
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 84e2a551a72c79b020694bb327e33b6d71b09b63 (commit)
from 852eb34d5c56bc75bdd82327fcf310d98655f6b0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=84e2a551a72c79b020694bb327e33b6d71b09b63
commit 84e2a551a72c79b020694bb327e33b6d71b09b63
Author: Ulrich Drepper <drepper@gmail.com>
Date: Wed Jun 22 10:32:07 2011 -0400
Use a /sys/devices/system/cpu/online for _SC_NPROCESSORS_ONLN implementation
diff --git a/ChangeLog b/ChangeLog
index 9cef65a..68409c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2011-06-22 Ulrich Drepper <drepper@gmail.com>
+ * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Use
+ /sys/devices/system/cpu/online if it is usable.
+
* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Rate limit
reading the information from the /proc filesystem to once a second.
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index a13b6e3..b74774f 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -161,20 +161,65 @@ __get_nprocs ()
char *buffer_end = buffer + buffer_size;
char *cp = buffer_end;
char *re = buffer_end;
- int result = 1;
#ifdef O_CLOEXEC
const int flags = O_RDONLY | O_CLOEXEC;
#else
const int flags = O_RDONLY;
#endif
+ int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags);
+ char *l;
+ int result = 0;
+ if (fd != -1)
+ {
+ l = next_line (fd, buffer, &cp, &re, buffer_end);
+ if (l != NULL)
+ do
+ {
+ char *endp;
+ unsigned long int n = strtoul (l, &endp, 10);
+ if (l == endp)
+ {
+ result = 0;
+ break;
+ }
+
+ unsigned long int m = n;
+ if (*endp == '-')
+ {
+ l = endp + 1;
+ m = strtoul (l, &endp, 10);
+ if (l == endp)
+ {
+ result = 0;
+ break;
+ }
+ }
+
+ result += m - n + 1;
+
+ l = endp;
+ while (l < re && isspace (*l))
+ ++l;
+ }
+ while (l < re);
+
+ close_not_cancel_no_status (fd);
+
+ if (result > 0)
+ goto out;
+ }
+
+ cp = buffer_end;
+ re = buffer_end;
+ result = 1;
+
/* The /proc/stat format is more uniform, use it by default. */
- int fd = open_not_cancel_2 ("/proc/stat", flags);
+ fd = open_not_cancel_2 ("/proc/stat", flags);
if (fd != -1)
{
result = 0;
- char *l;
while ((l = next_line (fd, buffer, &cp, &re, buffer_end)) != NULL)
/* The current format of /proc/stat has all the cpu* entries
at the front. We assume here that stays this way. */
@@ -195,6 +240,7 @@ __get_nprocs ()
}
}
+ out:
cached_result = result;
atomic_write_barrier ();
timestamp = ts.tv_sec;
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 3 ++
sysdeps/unix/sysv/linux/getsysstats.c | 52 +++++++++++++++++++++++++++++++--
2 files changed, 52 insertions(+), 3 deletions(-)
hooks/post-receive
--
GNU C Library master sources