Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* stdlib/test-canon.c (do_test): Close fd before unlinking file so
	that directory is empty even on non-POSIX filesystems.
  • Loading branch information
Ulrich Drepper committed Aug 1, 2006
1 parent 13669f2 commit a1260d9
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 6 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion nptl/Makefile
Expand Up @@ -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

Expand Down
11 changes: 8 additions & 3 deletions nptl/allocatestack.c
Expand Up @@ -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. */
Expand All @@ -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);

Expand Down
114 changes: 114 additions & 0 deletions nptl/tst-getpid3.c
@@ -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"
8 changes: 6 additions & 2 deletions stdlib/test-canon.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>.
Expand Down Expand Up @@ -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");
Expand Down

0 comments on commit a1260d9

Please sign in to comment.