1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-20 11:21:29 +03:00
2004-11-10  Jakub Jelinek  <jakub@redhat.com>

	* Makefile (tests): Add tst-exit3.
	* tst-exit3.c: New test.
This commit is contained in:
Ulrich Drepper
2004-11-10 07:54:40 +00:00
parent 5429ff760a
commit ed2ced8ae3
7 changed files with 113 additions and 30 deletions

View File

@@ -1,3 +1,8 @@
2004-11-10 Jakub Jelinek <jakub@redhat.com>
* Makefile (tests): Add tst-exit3.
* tst-exit3.c: New test.
2004-11-09 Ulrich Drepper <drepper@redhat.com> 2004-11-09 Ulrich Drepper <drepper@redhat.com>
* Makefile (tests): Add tst-exit2. * Makefile (tests): Add tst-exit2.

View File

@@ -227,7 +227,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 \
tst-signal1 tst-signal2 tst-signal3 tst-signal4 tst-signal5 \ tst-signal1 tst-signal2 tst-signal3 tst-signal4 tst-signal5 \
tst-signal6 \ tst-signal6 \
tst-exec1 tst-exec2 tst-exec3 tst-exec4 \ tst-exec1 tst-exec2 tst-exec3 tst-exec4 \
tst-exit1 tst-exit2 \ tst-exit1 tst-exit2 tst-exit3 \
tst-stdio1 tst-stdio2 \ tst-stdio1 tst-stdio2 \
tst-stack1 tst-stack2 tst-stack3 \ tst-stack1 tst-stack2 tst-stack3 \
tst-unload \ tst-unload \

81
nptl/tst-exit3.c Normal file
View File

@@ -0,0 +1,81 @@
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static pthread_barrier_t b;
static void *
tf2 (void *arg)
{
while (1)
sleep (100);
/* NOTREACHED */
return NULL;
}
static void *
tf (void *arg)
{
pthread_t th;
int e = pthread_barrier_wait (&b);
if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
{
puts ("barrier_wait failed");
exit (1);
}
e = pthread_create (&th, NULL, tf2, NULL);
if (e != 0)
{
printf ("create failed: %s\n", strerror (e));
exit (1);
}
/* Terminate only this thread. */
return NULL;
}
static int
do_test (void)
{
pthread_t th;
if (pthread_barrier_init (&b, NULL, 2) != 0)
{
puts ("barrier_init failed");
exit (1);
}
int e = pthread_create (&th, NULL, tf, NULL);
if (e != 0)
{
printf ("create failed: %s\n", strerror (e));
exit (1);
}
e = pthread_barrier_wait (&b);
if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
{
puts ("barrier_wait failed");
exit (1);
}
/* Terminate only this thread. */
pthread_exit (NULL);
/* NOTREACHED */
return 1;
}
#define EXPECTED_SIGNAL SIGALRM
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@@ -33,15 +33,8 @@
extern int __nss_not_use_nscd_hosts; extern int __nss_not_use_nscd_hosts;
libc_locked_map_ptr (map_handle); /* We use the mapping from nscd_gethst. */
/* Note that we only free the structure if necessary. The memory libc_locked_map_ptr (extern, __hst_map_handle);
mapping is not removed since it is not visible to the malloc
handling. */
libc_freeres_fn (ai_map_free)
{
if (map_handle.mapped != NO_MAPPING)
free (map_handle.mapped);
}
int int
@@ -53,7 +46,8 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
/* If the mapping is available, try to search there instead of /* If the mapping is available, try to search there instead of
communicating with the nscd. */ communicating with the nscd. */
struct mapped_database *mapped; struct mapped_database *mapped;
mapped = __nscd_get_map_ref (GETFDHST, "hosts", &map_handle, &gc_cycle); mapped = __nscd_get_map_ref (GETFDHST, "hosts", &__hst_map_handle,
&gc_cycle);
retry:; retry:;
const ai_response_header *ai_resp = NULL; const ai_response_header *ai_resp = NULL;

View File

@@ -67,14 +67,18 @@ __nscd_getgrgid_r (gid_t gid, struct group *resultbuf, char *buffer,
} }
libc_locked_map_ptr (map_handle); libc_locked_map_ptr (,__gr_map_handle);
/* Note that we only free the structure if necessary. The memory /* Note that we only free the structure if necessary. The memory
mapping is not removed since it is not visible to the malloc mapping is not removed since it is not visible to the malloc
handling. */ handling. */
libc_freeres_fn (gr_map_free) libc_freeres_fn (gr_map_free)
{ {
if (map_handle.mapped != NO_MAPPING) if (__gr_map_handle.mapped != NO_MAPPING)
free (map_handle.mapped); {
void *p = __gr_map_handle.mapped;
__gr_map_handle.mapped = NO_MAPPING;
free (p);
}
} }
@@ -91,7 +95,8 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
/* If the mapping is available, try to search there instead of /* If the mapping is available, try to search there instead of
communicating with the nscd. */ communicating with the nscd. */
struct mapped_database *mapped = __nscd_get_map_ref (GETFDGR, "group", struct mapped_database *mapped = __nscd_get_map_ref (GETFDGR, "group",
&map_handle, &gc_cycle); &__gr_map_handle,
&gc_cycle);
retry:; retry:;
const gr_response_header *gr_resp = NULL; const gr_response_header *gr_resp = NULL;
const char *gr_name = NULL; const char *gr_name = NULL;

View File

@@ -87,14 +87,18 @@ __nscd_gethostbyaddr_r (const void *addr, socklen_t len, int type,
} }
libc_locked_map_ptr (map_handle); libc_locked_map_ptr (, __hst_map_handle);
/* Note that we only free the structure if necessary. The memory /* Note that we only free the structure if necessary. The memory
mapping is not removed since it is not visible to the malloc mapping is not removed since it is not visible to the malloc
handling. */ handling. */
libc_freeres_fn (gr_map_free) libc_freeres_fn (hst_map_free)
{ {
if (map_handle.mapped != NO_MAPPING) if (__hst_map_handle.mapped != NO_MAPPING)
free (map_handle.mapped); {
void *p = __hst_map_handle.mapped;
__hst_map_handle.mapped = NO_MAPPING;
free (p);
}
} }
@@ -110,7 +114,8 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
/* If the mapping is available, try to search there instead of /* If the mapping is available, try to search there instead of
communicating with the nscd. */ communicating with the nscd. */
struct mapped_database *mapped; struct mapped_database *mapped;
mapped = __nscd_get_map_ref (GETFDHST, "hosts", &map_handle, &gc_cycle); mapped = __nscd_get_map_ref (GETFDHST, "hosts", &__hst_map_handle,
&gc_cycle);
retry:; retry:;
const hst_response_header *hst_resp = NULL; const hst_response_header *hst_resp = NULL;

View File

@@ -29,15 +29,8 @@
#include "nscd_proto.h" #include "nscd_proto.h"
libc_locked_map_ptr (map_handle); /* We use the same mapping as in nscd_getgr. */
/* Note that we only free the structure if necessary. The memory libc_locked_map_ptr (extern, __gr_map_handle);
mapping is not removed since it is not visible to the malloc
handling. */
libc_freeres_fn (gr_map_free)
{
if (map_handle.mapped != NO_MAPPING)
free (map_handle.mapped);
}
int int
@@ -50,7 +43,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
/* If the mapping is available, try to search there instead of /* If the mapping is available, try to search there instead of
communicating with the nscd. */ communicating with the nscd. */
struct mapped_database *mapped; struct mapped_database *mapped;
mapped = __nscd_get_map_ref (GETFDGR, "group", &map_handle, &gc_cycle); mapped = __nscd_get_map_ref (GETFDGR, "group", &__gr_map_handle, &gc_cycle);
retry:; retry:;
const initgr_response_header *initgr_resp = NULL; const initgr_response_header *initgr_resp = NULL;