GDB server:
* Fix bug in logic related to signal-passing
* use SIGSTOP instead of SIGTRAP (avoid race condition)
(Philippe Waroquiers, philippe.waroquiers@skynet.be).  Bug 214909
comment 109.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11837 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/gdbserver_tests/passsigalrm.c b/gdbserver_tests/passsigalrm.c
new file mode 100644
index 0000000..c6f1fb5
--- /dev/null
+++ b/gdbserver_tests/passsigalrm.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+static int sigalrm_received = 0;
+
+static void sigalrm_handler(int signr)
+{
+   sigalrm_received++;
+}
+
+int main (int argc, char *argv[])
+{
+   struct sigaction sa;
+   fprintf(stderr, "starting ...\n");
+   sa.sa_handler = sigalrm_handler;
+   sigemptyset(&sa.sa_mask);
+   sa.sa_flags = 0;
+   sa.sa_restorer = NULL;
+   if (sigaction (SIGALRM, &sa, NULL) != 0)
+      perror("sigaction");
+   if (kill(getpid(), SIGALRM) != 0)
+      perror("kill 1");
+
+   if (sigalrm_received == 1)
+      fprintf (stderr, "ok: 1st SIGALRM received\n");
+   else
+      fprintf (stderr, "wrong 1st: unexpected value %d sigalrm_received\n",
+               sigalrm_received);
+
+   if (kill(getpid(), SIGALRM) != 0)
+      perror("kill 2");
+
+   if (sigalrm_received == 2)
+      fprintf (stderr, "ok: 2nd SIGALRM received\n");
+   else
+      fprintf (stderr, "wrong 2nd: unexpected value %d sigalrm_received\n",
+               sigalrm_received);
+
+   return 0;
+}