mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
Update.
2003-09-18 Jakub Jelinek <jakub@redhat.com> * libio/memstream.c (open_memstream): Use _IO_init instead of _IO_old_init.
This commit is contained in:
parent
bcc86889c7
commit
8b8074da86
@ -1,3 +1,8 @@
|
||||
2003-09-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* libio/memstream.c (open_memstream): Use _IO_init instead of
|
||||
_IO_old_init.
|
||||
|
||||
2003-09-17 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/generic/wordexp.c (eval_expr_val): Use strtol since we
|
||||
|
@ -86,7 +86,7 @@ open_memstream (bufloc, sizeloc)
|
||||
buf = malloc (_IO_BUFSIZ);
|
||||
if (buf == NULL)
|
||||
return NULL;
|
||||
_IO_old_init (&new_f->fp._sf._sbf._f, 0);
|
||||
_IO_init (&new_f->fp._sf._sbf._f, 0);
|
||||
_IO_JUMPS ((struct _IO_FILE_plus *) &new_f->fp._sf._sbf) = &_IO_mem_jumps;
|
||||
_IO_str_init_static_internal (&new_f->fp._sf, buf, _IO_BUFSIZ, buf);
|
||||
new_f->fp._sf._sbf._f._flags &= ~_IO_USER_BUF;
|
||||
|
@ -1,3 +1,10 @@
|
||||
2003-09-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/pthread/pthread.h (pthread_getattr_np): Clarify usage.
|
||||
|
||||
* tst-attr1.c: New test.
|
||||
* Makefile (tests): Add tst-attr1.
|
||||
|
||||
2003-09-17 Philip Blundell <philb@gnu.org>
|
||||
|
||||
* sysdeps/unix/sysv/linux/arm/vfork.S: Branch to fork if
|
||||
|
@ -109,7 +109,7 @@ tests = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 $(librt-tests) ex12 ex13 joinrace \
|
||||
tststack $(tests-nodelete-$(have-z-nodelete)) ecmutex ex14 ex15 ex16 \
|
||||
ex17 ex18 tst-cancel tst-context bug-sleep \
|
||||
tst-cancel1 tst-cancel2 tst-cancel3 tst-cancel4 tst-cancel5 \
|
||||
tst-cancel6 tst-cancel7 tst-popen tst-popen2
|
||||
tst-cancel6 tst-cancel7 tst-popen tst-popen2 tst-attr1
|
||||
test-srcs = tst-signal
|
||||
# These tests are linked with libc before libpthread
|
||||
tests-reverse += tst-cancel5
|
||||
|
@ -289,7 +289,9 @@ extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
|
||||
__THROW;
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Get thread attributes corresponding to the already running thread TH. */
|
||||
/* Initialize thread attribute *ATTR with attributes corresponding to the
|
||||
already running thread TH. It shall be called on unitialized ATTR
|
||||
and destroyed with pthread_attr_destroy when no longer needed. */
|
||||
extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) __THROW;
|
||||
#endif
|
||||
|
||||
|
358
linuxthreads/tst-attr1.c
Normal file
358
linuxthreads/tst-attr1.c
Normal file
@ -0,0 +1,358 @@
|
||||
/* pthread_getattr_np test.
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <error.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <stackinfo.h>
|
||||
|
||||
static void *
|
||||
tf (void *arg)
|
||||
{
|
||||
pthread_attr_t a, *ap, a2;
|
||||
int err;
|
||||
void *result = NULL;
|
||||
|
||||
if (arg == NULL)
|
||||
{
|
||||
ap = &a2;
|
||||
err = pthread_attr_init (ap);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_init failed");
|
||||
return tf;
|
||||
}
|
||||
}
|
||||
else
|
||||
ap = (pthread_attr_t *) arg;
|
||||
|
||||
err = pthread_getattr_np (pthread_self (), &a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_getattr_np failed");
|
||||
result = tf;
|
||||
}
|
||||
|
||||
int detachstate1, detachstate2;
|
||||
err = pthread_attr_getdetachstate (&a, &detachstate1);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getdetachstate failed");
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
{
|
||||
err = pthread_attr_getdetachstate (ap, &detachstate2);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getdetachstate failed");
|
||||
result = tf;
|
||||
}
|
||||
else if (detachstate1 != detachstate2)
|
||||
{
|
||||
error (0, 0, "detachstate differs %d != %d",
|
||||
detachstate1, detachstate2);
|
||||
result = tf;
|
||||
}
|
||||
}
|
||||
|
||||
void *stackaddr;
|
||||
size_t stacksize;
|
||||
err = pthread_attr_getstack (&a, &stackaddr, &stacksize);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getstack failed");
|
||||
result = tf;
|
||||
}
|
||||
else if ((void *) &a < stackaddr
|
||||
|| (void *) &a >= stackaddr + stacksize)
|
||||
{
|
||||
error (0, 0, "pthread_attr_getstack returned range does not cover thread's stack");
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
printf ("thread stack %p-%p (0x%zx)\n", stackaddr, stackaddr + stacksize,
|
||||
stacksize);
|
||||
|
||||
size_t guardsize1, guardsize2;
|
||||
err = pthread_attr_getguardsize (&a, &guardsize1);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getguardsize failed");
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
{
|
||||
err = pthread_attr_getguardsize (ap, &guardsize2);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getguardsize failed");
|
||||
result = tf;
|
||||
}
|
||||
else if (guardsize1 != guardsize2)
|
||||
{
|
||||
error (0, 0, "guardsize differs %zd != %zd",
|
||||
guardsize1, guardsize2);
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
printf ("thread guardsize %zd\n", guardsize1);
|
||||
}
|
||||
|
||||
int scope1, scope2;
|
||||
err = pthread_attr_getscope (&a, &scope1);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getscope failed");
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
{
|
||||
err = pthread_attr_getscope (ap, &scope2);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getscope failed");
|
||||
result = tf;
|
||||
}
|
||||
else if (scope1 != scope2)
|
||||
{
|
||||
error (0, 0, "scope differs %d != %d",
|
||||
scope1, scope2);
|
||||
result = tf;
|
||||
}
|
||||
}
|
||||
|
||||
err = pthread_attr_destroy (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_destroy failed");
|
||||
result = tf;
|
||||
}
|
||||
|
||||
if (ap == &a2)
|
||||
{
|
||||
err = pthread_attr_destroy (ap);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_destroy failed");
|
||||
result = tf;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
int result = 0;
|
||||
pthread_attr_t a;
|
||||
|
||||
int err = pthread_attr_init (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_init failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_attr_destroy (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_destroy failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_getattr_np (pthread_self (), &a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_getattr_np failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
int detachstate;
|
||||
err = pthread_attr_getdetachstate (&a, &detachstate);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getdetachstate failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (detachstate != PTHREAD_CREATE_JOINABLE)
|
||||
{
|
||||
error (0, 0, "initial thread not joinable");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
void *stackaddr;
|
||||
size_t stacksize;
|
||||
err = pthread_attr_getstack (&a, &stackaddr, &stacksize);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getstack failed");
|
||||
result = 1;
|
||||
}
|
||||
else if ((void *) &a < stackaddr
|
||||
|| (void *) &a >= stackaddr + stacksize)
|
||||
{
|
||||
error (0, 0, "pthread_attr_getstack returned range does not cover main's stack");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
printf ("initial thread stack %p-%p (0x%zx)\n", stackaddr,
|
||||
stackaddr + stacksize, stacksize);
|
||||
|
||||
size_t guardsize;
|
||||
err = pthread_attr_getguardsize (&a, &guardsize);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getguardsize failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (guardsize != 0)
|
||||
{
|
||||
error (0, 0, "pthread_attr_getguardsize returned %zd != 0",
|
||||
guardsize);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
int scope;
|
||||
err = pthread_attr_getscope (&a, &scope);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getscope failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (scope != PTHREAD_SCOPE_SYSTEM)
|
||||
{
|
||||
error (0, 0, "pthread_attr_getscope returned %d != PTHREAD_SCOPE_SYSTEM",
|
||||
scope);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
int inheritsched;
|
||||
err = pthread_attr_getinheritsched (&a, &inheritsched);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_getinheritsched failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (inheritsched != PTHREAD_INHERIT_SCHED)
|
||||
{
|
||||
error (0, 0, "pthread_attr_getinheritsched returned %d != PTHREAD_INHERIT_SCHED",
|
||||
inheritsched);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_attr_destroy (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_destroy failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
pthread_t th;
|
||||
err = pthread_create (&th, NULL, tf, NULL);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_create #1 failed");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
void *ret;
|
||||
err = pthread_join (th, &ret);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_join #1 failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (ret != NULL)
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_attr_init (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_init failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_create (&th, &a, tf, &a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_create #2 failed");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
void *ret;
|
||||
err = pthread_join (th, &ret);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_join #2 failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (ret != NULL)
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_attr_setguardsize (&a, 16 * sysconf (_SC_PAGESIZE));
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_setguardsize failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_create (&th, &a, tf, &a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_create #3 failed");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
void *ret;
|
||||
err = pthread_join (th, &ret);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_join #3 failed");
|
||||
result = 1;
|
||||
}
|
||||
else if (ret != NULL)
|
||||
result = 1;
|
||||
}
|
||||
|
||||
err = pthread_attr_destroy (&a);
|
||||
if (err)
|
||||
{
|
||||
error (0, err, "pthread_attr_destroy failed");
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
@ -1,3 +1,8 @@
|
||||
2003-09-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tst-attr3.c (tf, do_test): Print stack start/end/size and
|
||||
guardsize for each thread.
|
||||
|
||||
2003-09-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/pthread/pthread.h (pthread_getattr_np): Clarify usage.
|
||||
|
@ -92,6 +92,9 @@ tf (void *arg)
|
||||
error (0, 0, "pthread_attr_getstack returned range does not cover thread's stack");
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
printf ("thread stack %p-%p (0x%zx)\n", stackaddr, stackaddr + stacksize,
|
||||
stacksize);
|
||||
|
||||
size_t guardsize1, guardsize2;
|
||||
err = pthread_attr_getguardsize (&a, &guardsize1);
|
||||
@ -114,6 +117,8 @@ tf (void *arg)
|
||||
guardsize1, guardsize2);
|
||||
result = tf;
|
||||
}
|
||||
else
|
||||
printf ("thread guardsize %zd\n", guardsize1);
|
||||
}
|
||||
|
||||
int scope1, scope2;
|
||||
@ -262,6 +267,9 @@ do_test (void)
|
||||
error (0, 0, "pthread_attr_getstack returned range does not cover main's stack");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
printf ("initial thread stack %p-%p (0x%zx)\n", stackaddr,
|
||||
stackaddr + stacksize, stacksize);
|
||||
|
||||
size_t guardsize;
|
||||
err = pthread_attr_getguardsize (&a, &guardsize);
|
||||
|
Loading…
Reference in New Issue
Block a user