2004-04-15  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/sysv/linux/timer_routines.c: Include errno.h.
	(timer_helper_thread): Use inline rt_sigtimedwait syscall instead
	of calling sigwaitinfo.
This commit is contained in:
Ulrich Drepper 2004-04-17 18:02:33 +00:00
parent 4efcb71399
commit d7ba1313b9
3 changed files with 67 additions and 25 deletions

View File

@ -13,41 +13,64 @@ The hdrchk test suite is available from the Open Group at
ftp://ftp.rdg.opengroup.org/pub/unsupported/stdtools/hdrchk/
I've last run the suite on 2000-08-13 on a Linux/ix86 system with the
following results [*]:
I've last run the suite on 2004-04-17 on a Linux/x86 system running
a Fedora Core 2 test 2 + updates with the following results [*]:
FIPS No reported problems
POSIX90 No reported problems
XPG3 No reported problems
XPG4 No reported problems
POSIX96 Same as for UNIX98 (see below).
UNIX98 The message queue implementation is missing:
XPG3 Prototypes are now in the correct header file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/****** <mqueue.h> - Missing include file ******/
/****** Start of Definitions for file mqueue.h ******/
extern int mq_close();
extern int mq_getattr();
extern int mq_notify();
extern mqd_t mq_open();
extern ssize_t mq_receive();
extern int mq_send();
extern int mq_setattr();
extern int mq_unlink();
typedef <type> mqd_t;
struct mq_attr { <members> };
struct sigevent { <members> };
/****** End of Definitions for file mqueue.h ******/
*** Starting unistd.h
Missing: extern char * cuserid();
Missing: extern int rename();
*** Completed unistd.h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XPG4 Prototype is now in the correct header file
and the _POSIX2_C_VERSION symbol has been removed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*** Starting unistd.h
Missing: extern char * cuserid();
Missing: #define _POSIX2_C_VERSION (-1L)
*** Completed unistd.h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
POSIX96 Prototype moved
(using "base realtime threads" subsets)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*** Starting unistd.h
Missing: extern int pthread_atfork();
*** Completed unistd.h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UNIX98 Prototypes moved and _POSIX2_C_VERSION removed
(using "base realtime threads mse lfs" subset)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*** Starting unistd.h
Missing: extern char * cuserid();
Missing: #define _POSIX2_C_VERSION (-1L)
Missing: extern int pthread_atfork();
*** Completed unistd.h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
That means all the reported issues are due to the headers having been
cleaned up for recent POSIX/Unix specification versions. Duplicated
prototypes have been removed and obsolete symbols have been removed.
Which means that as far as the tests performed by the script go, the
headers files comply to the current POSIX/Unix specification.
[*] Since the scripts are not clever enough for the way gcc handles
include files (namely, putting some of them in gcc-local directory) I
copied over the iso646.h, float.h, and stddef.h headers and ignored the
problems resulting from the splitted limits.h file).
problems resulting from the split limits.h file).
Technical C standards conformance issues in glibc

View File

@ -1,3 +1,9 @@
2004-04-15 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/timer_routines.c: Include errno.h.
(timer_helper_thread): Use inline rt_sigtimedwait syscall instead
of calling sigwaitinfo.
2004-04-16 Ulrich Drepper <drepper@redhat.com>
* allocatestack.c (allocate_stack): Set reported_guardsize

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@ -17,6 +17,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <setjmp.h>
#include <signal.h>
#include <stdbool.h>
@ -61,7 +62,19 @@ timer_helper_thread (void *arg)
{
siginfo_t si;
if (sigwaitinfo (&ss, &si) > 0)
/* sigwaitinfo cannot be used here, since it deletes
SIGCANCEL == SIGTIMER from the set. */
int oldtype = LIBC_CANCEL_ASYNC ();
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
int result = INLINE_SYSCALL (rt_sigtimedwait, 4, &ss, &si, NULL,
_NSIG / 8);
LIBC_CANCEL_RESET (oldtype);
if (result > 0)
{
if (si.si_code == SI_TIMER)
{