From: Julian Seward Date: Sun, 13 Jul 2003 11:13:37 +0000 (+0000) Subject: Add test for correct errno handling in threaded programs. X-Git-Tag: svn/VALGRIND_2_0_0~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ad483fa714b4dd236f5e34b13a386ed06de7c960;p=thirdparty%2Fvalgrind.git Add test for correct errno handling in threaded programs. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1755 --- diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am index 1faab0756c..e44951f5bc 100644 --- a/memcheck/tests/Makefile.am +++ b/memcheck/tests/Makefile.am @@ -54,7 +54,8 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ trivialleak.stderr.exp trivialleak.vgtest \ tronical.stderr.exp tronical.vgtest \ weirdioctl.stderr.exp weirdioctl.stdout.exp weirdioctl.vgtest \ - metadata.stderr.exp metadata.stdout.exp metadata.vgtest + metadata.stderr.exp metadata.stdout.exp metadata.vgtest \ + threadederrno.stderr.exp threadederrno.stdout.exp threadederrno.vgtest check_PROGRAMS = \ badaddrvalue badfree badjump badloop buflen_check clientperm \ @@ -65,7 +66,7 @@ check_PROGRAMS = \ overlap pushfpopf \ realloc1 realloc2 sigaltstack signal2 supp1 supp2 suppfree \ trivialleak tronical weirdioctl \ - mismatches new_override metadata + mismatches new_override metadata threadederrno AM_CPPFLAGS = -I$(top_srcdir)/include AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow -g @@ -111,6 +112,8 @@ trivialleak_SOURCES = trivialleak.c tronical_SOURCES = tronical.S weirdioctl_SOURCES = weirdioctl.c metadata_SOURCES = metadata.c +threadederrno_SOURCES = threadederrno.c +threadederrno_LDADD = -lpthread # C++ ones mismatches_SOURCES = mismatches.cpp diff --git a/memcheck/tests/threadederrno.c b/memcheck/tests/threadederrno.c new file mode 100644 index 0000000000..bc05be5adc --- /dev/null +++ b/memcheck/tests/threadederrno.c @@ -0,0 +1,38 @@ + +#include +#include +#include + + + +void* thr2 ( void* v ) +{ + FILE* f = fopen("bogus2", "r"); + printf("f2 = %p, errno2 = %d\n", f, errno); + perror("wurble2"); + return NULL; +} + +void* thr3 ( void* v ) +{ + FILE* f = fopen("bogus3", "r"); + printf("f3 = %p, errno3 = %d\n", f, errno); + perror("wurble3"); + return NULL; +} + + +int main ( void ) +{ + FILE* f; + pthread_t tid2, tid3; + pthread_create(&tid2, NULL, &thr2, NULL); + pthread_create(&tid3, NULL, &thr3, NULL); + f = fopen("bogus", "r"); + printf("f1 = %p, errno1 = %d\n", f, errno); + perror("wurble1"); + pthread_join(tid2, NULL); + pthread_join(tid3, NULL); + return 0; +} + diff --git a/memcheck/tests/threadederrno.stderr.exp b/memcheck/tests/threadederrno.stderr.exp new file mode 100644 index 0000000000..99cd1a3b0a --- /dev/null +++ b/memcheck/tests/threadederrno.stderr.exp @@ -0,0 +1,3 @@ +wurble1: No such file or directory +wurble2: No such file or directory +wurble3: No such file or directory diff --git a/memcheck/tests/threadederrno.stdout.exp b/memcheck/tests/threadederrno.stdout.exp new file mode 100644 index 0000000000..a05dec234b --- /dev/null +++ b/memcheck/tests/threadederrno.stdout.exp @@ -0,0 +1,3 @@ +f1 = (nil), errno1 = 2 +f2 = (nil), errno2 = 2 +f3 = (nil), errno3 = 2 diff --git a/memcheck/tests/threadederrno.vgtest b/memcheck/tests/threadederrno.vgtest new file mode 100644 index 0000000000..a9fa6bedff --- /dev/null +++ b/memcheck/tests/threadederrno.vgtest @@ -0,0 +1,2 @@ +prog: threadederrno +vgopts: -q