mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
* stdlib/test-canon.c (do_test): Close fd before unlinking file so
that directory is empty even on non-POSIX filesystems.
This commit is contained in:
parent
13669f2c30
commit
a1260d92a7
@ -1,3 +1,8 @@
|
||||
2006-07-20 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* stdlib/test-canon.c (do_test): Close fd before unlinking file so
|
||||
that directory is empty even on non-POSIX filesystems.
|
||||
|
||||
2006-07-31 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* elf/dl-open.c (dl_open_worker): Add branch prediction.
|
||||
|
@ -256,7 +256,7 @@ tests = tst-typesizes \
|
||||
tst-backtrace1 \
|
||||
tst-oddstacklimit \
|
||||
tst-vfork1 tst-vfork2 tst-vfork1x tst-vfork2x \
|
||||
tst-getpid1 tst-getpid2 \
|
||||
tst-getpid1 tst-getpid2 tst-getpid3 \
|
||||
tst-initializers1 $(patsubst %,tst-initializers1-%,c89 gnu89 c99 gnu99)
|
||||
xtests = tst-setuid1 tst-setuid1-static
|
||||
|
||||
|
@ -742,9 +742,7 @@ __reclaim_stacks (void)
|
||||
list_t *runp;
|
||||
list_for_each (runp, &stack_used)
|
||||
{
|
||||
struct pthread *curp;
|
||||
|
||||
curp = list_entry (runp, struct pthread, list);
|
||||
struct pthread *curp = list_entry (runp, struct pthread, list);
|
||||
if (curp != self)
|
||||
{
|
||||
/* This marks the stack as free. */
|
||||
@ -758,6 +756,13 @@ __reclaim_stacks (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Reset the PIDs in any cached stacks. */
|
||||
list_for_each (runp, &stack_cache)
|
||||
{
|
||||
struct pthread *curp = list_entry (runp, struct pthread, list);
|
||||
curp->pid = self->pid;
|
||||
}
|
||||
|
||||
/* Add the stack of all running threads to the cache. */
|
||||
list_splice (&stack_used, &stack_cache);
|
||||
|
||||
|
114
nptl/tst-getpid3.c
Normal file
114
nptl/tst-getpid3.c
Normal file
@ -0,0 +1,114 @@
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
|
||||
static pid_t pid;
|
||||
|
||||
static void *
|
||||
pid_thread (void *arg)
|
||||
{
|
||||
if (pid != getpid ())
|
||||
{
|
||||
printf ("pid wrong in thread: should be %d, is %d\n",
|
||||
(int) pid, (int) getpid ());
|
||||
return (void *) 1L;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
pid = getpid ();
|
||||
|
||||
pthread_t thr;
|
||||
int ret = pthread_create (&thr, NULL, pid_thread, NULL);
|
||||
if (ret)
|
||||
{
|
||||
printf ("pthread_create failed: %d\n", ret);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void *thr_ret;
|
||||
ret = pthread_join (thr, &thr_ret);
|
||||
if (ret)
|
||||
{
|
||||
printf ("pthread_create failed: %d\n", ret);
|
||||
return 1;
|
||||
}
|
||||
else if (thr_ret)
|
||||
{
|
||||
printf ("thread getpid failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
pid_t child = fork ();
|
||||
if (child == -1)
|
||||
{
|
||||
printf ("fork failed: %m\n");
|
||||
return 1;
|
||||
}
|
||||
else if (child == 0)
|
||||
{
|
||||
if (pid == getpid ())
|
||||
{
|
||||
puts ("pid did not change after fork");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
pid = getpid ();
|
||||
ret = pthread_create (&thr, NULL, pid_thread, NULL);
|
||||
if (ret)
|
||||
{
|
||||
printf ("pthread_create failed: %d\n", ret);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = pthread_join (thr, &thr_ret);
|
||||
if (ret)
|
||||
{
|
||||
printf ("pthread_create failed: %d\n", ret);
|
||||
return 1;
|
||||
}
|
||||
else if (thr_ret)
|
||||
{
|
||||
printf ("thread getpid failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int status;
|
||||
if (TEMP_FAILURE_RETRY (waitpid (child, &status, 0)) != child)
|
||||
{
|
||||
puts ("waitpid failed");
|
||||
kill (child, SIGKILL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!WIFEXITED (status))
|
||||
{
|
||||
if (WIFSIGNALED (status))
|
||||
printf ("died from signal %s\n", strsignal (WTERMSIG (status)));
|
||||
else
|
||||
puts ("did not terminate correctly");
|
||||
return 1;
|
||||
}
|
||||
if (WEXITSTATUS (status) != 0)
|
||||
{
|
||||
printf ("exit code %d\n", WEXITSTATUS (status));
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
@ -1,5 +1,6 @@
|
||||
/* Test program for returning the canonical absolute name of a given file.
|
||||
Copyright (C) 1996,1997,2000,2002,2004,2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996,1997,2000,2002,2004,2005,2006
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger <davidm@azstarnet.com>.
|
||||
|
||||
@ -213,7 +214,10 @@ do_test (int argc, char ** argv)
|
||||
}
|
||||
|
||||
if (fd >= 0)
|
||||
unlink ("doesExist/someFile");
|
||||
{
|
||||
close (fd);
|
||||
unlink ("doesExist/someFile");
|
||||
}
|
||||
|
||||
if (has_dir)
|
||||
rmdir ("doesExist");
|
||||
|
Loading…
Reference in New Issue
Block a user