From: Nadav Har'El <n...@scylladb.com>
Committer: Nadav Har'El <n...@scylladb.com>
Branch: master

tests/tst-kill: fix hang on Linux

The test for interrupted system call used signal(), but on Linux this
function always restarts interrupted system calls - also blocking
network system calls - so this test would hang on Linux. So fix it to
use sigaction(), which properly interrupts the system call on both Linux
and OSv.

Signed-off-by: Nadav Har'El <n...@scylladb.com>
Message-Id: <20170306133902.21870-1-...@scylladb.com>

---
diff --git a/tests/tst-kill.cc b/tests/tst-kill.cc
--- a/tests/tst-kill.cc
+++ b/tests/tst-kill.cc
@@ -78,8 +78,16 @@ int main(int ac, char** av)
report(global == 0, "1 more second after cancelling alarm - still global==0");

     //Test that SIG_ALRM interrupts system calls
-    sr = signal(SIGALRM, handler1);
-    report(sr != SIG_ERR, "set SIGALRM handler");
+    // TODO: a previous version of this test used signal(), but on Linux
+    // signal() restarts system calls, so this test would fail, so we need
+    // to use sigaction() here. We should add a test verifying that on OSv
+    // signal() also doesn't interrupt networking system calls (however,
+    // currently such a test would fail).
+    //sr = signal(SIGALRM, handler1);
+    struct sigaction a = {};
+    a.sa_handler = handler1;
+    r = sigaction(SIGALRM, &a, nullptr);
+    report(r == 0, "set SIGALRM handler");

     auto s = socket(AF_INET,SOCK_DGRAM,0);
     char buf[10];

--
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to