mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-25 13:51:04 +08:00
Avoid gettimeofday vsyscall
This commit is contained in:
parent
42a36f6670
commit
d53a73acdb
@ -1,3 +1,8 @@
|
||||
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Don't use
|
||||
gettimeofday vsyscall, just use time.
|
||||
|
||||
2011-09-06 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c [!SHARED]: Include
|
||||
|
@ -37,15 +37,6 @@
|
||||
#include <not-cancel.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
|
||||
# undef INTERNAL_VSYSCALL
|
||||
# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
|
||||
# undef INLINE_VSYSCALL
|
||||
# define INLINE_VSYSCALL INLINE_SYSCALL
|
||||
#else
|
||||
# include <bits/libc-vdso.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* How we can determine the number of available processors depends on
|
||||
the configuration. There is currently (as of version 2.0.21) no
|
||||
@ -141,17 +132,10 @@ __get_nprocs ()
|
||||
static int cached_result;
|
||||
static time_t timestamp;
|
||||
|
||||
#ifdef __ASSUME_POSIX_TIMERS
|
||||
struct timespec ts;
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, &ts);
|
||||
#else
|
||||
struct timeval ts;
|
||||
__gettimeofday (&ts, NULL);
|
||||
#endif
|
||||
time_t now = time (NULL);
|
||||
time_t prev = timestamp;
|
||||
atomic_read_barrier ();
|
||||
if (ts.tv_sec == prev)
|
||||
if (now == prev)
|
||||
return cached_result;
|
||||
|
||||
/* XXX Here will come a test for the new system call. */
|
||||
@ -243,7 +227,7 @@ __get_nprocs ()
|
||||
out:
|
||||
cached_result = result;
|
||||
atomic_write_barrier ();
|
||||
timestamp = ts.tv_sec;
|
||||
timestamp = now;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user