Ver Fonte

Add a test for a sigchld bug

Eric Andersen há 22 anos atrás
pai
commit
eae91bb3af
3 ficheiros alterados com 65 adições e 1 exclusões
  1. 4 0
      test/signal/.cvsignore
  2. 23 1
      test/signal/Makefile
  3. 38 0
      test/signal/sigchld.c

+ 4 - 0
test/signal/.cvsignore

@@ -2,3 +2,7 @@ signal
 signal.o
 signal_glibc
 signal_glibc.o
+sigchld
+sigchld.o
+sigchld_glibc
+sigchld_glibc.o

+ 23 - 1
test/signal/Makefile

@@ -21,7 +21,7 @@ include $(TESTDIR)/Rules.mak
 
 CFLAGS += -D_GNU_SOURCE
 
-TARGETS=signal signal_glibc
+TARGETS=signal signal_glibc sigchld sigchld_glibc 
 all: $(TARGETS)
 
 signal: signal.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
@@ -46,6 +46,28 @@ signal_glibc: signal.c Makefile
 	-./$@
 	-@ echo " "
 
+sigchld: sigchld.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+	-@ echo "-------"
+	-@ echo " "
+	-@ echo "Compiling vs uClibc: "
+	-@ echo " "
+	$(CC) $(CFLAGS) -c $< -o $@.o
+	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+	$(STRIPTOOL) -x -R .note -R .comment $@
+	-./$@
+	-@ echo " "
+
+sigchld_glibc: sigchld.c Makefile
+	-@ echo "-------"
+	-@ echo " "
+	-@ echo "Compiling vs GNU libc: "
+	-@ echo " "
+	$(HOST_CC) $(GLIBC_CFLAGS) -c $< -o $@.o
+	$(HOST_CC) $(GLIBC_LDFLAGS) $@.o -o $@
+	$(STRIPTOOL) -x -R .note -R .comment $@
+	-./$@
+	-@ echo " "
+
 clean:
 	rm -f *.[oa] *~ core $(TARGETS)
 

+ 38 - 0
test/signal/sigchld.c

@@ -0,0 +1,38 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/signal.h>
+#include <unistd.h>
+
+void test_handler(int signo) 
+{
+    fprintf(stderr, "caught signo: %d\n", signo);
+}
+
+
+int main(void) 
+{
+    int count = 0;
+    struct sigaction siga;
+    static sigset_t sigset;
+
+    sigfillset(&sigset);
+
+    siga.sa_handler = test_handler;
+    siga.sa_mask = sigset;
+    siga.sa_flags = 0;
+
+    if (0 != sigaction(SIGCHLD, &siga, (struct sigaction *)NULL)) {
+	fprintf(stderr, "ack!");
+    }
+    printf("give me a SIGCHLD\n");
+
+    for(;;) {
+	sleep(10);
+	printf("after sleep %d\n", ++count);
+    }
+
+    printf("after loop\n");
+
+    return 0;
+}
+