[compiler-rt] r330328 - [Fuzzer] Make InterruptHandler non-blocking for Fuchsia

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 19 07:01:46 PDT 2018


Author: phosek
Date: Thu Apr 19 07:01:46 2018
New Revision: 330328

URL: http://llvm.org/viewvc/llvm-project?rev=330328&view=rev
Log:
[Fuzzer] Make InterruptHandler non-blocking for Fuchsia

The initial naive approach to simulate SIGINT on Fuchsia was to getchar
and look for ETX. This caused the InterruptHandler thread to lock stdin,
preventing musl's exit() from being able to close the stdio descriptors
and complete. This change uses select() instead.

Patch By: aarongreen

Differential Revision: https://reviews.llvm.org/D45636

Modified:
    compiler-rt/trunk/lib/fuzzer/FuzzerUtilFuchsia.cpp

Modified: compiler-rt/trunk/lib/fuzzer/FuzzerUtilFuchsia.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/fuzzer/FuzzerUtilFuchsia.cpp?rev=330328&r1=330327&r2=330328&view=diff
==============================================================================
--- compiler-rt/trunk/lib/fuzzer/FuzzerUtilFuchsia.cpp (original)
+++ compiler-rt/trunk/lib/fuzzer/FuzzerUtilFuchsia.cpp Thu Apr 19 07:01:46 2018
@@ -45,8 +45,13 @@ void AlarmHandler(int Seconds) {
 }
 
 void InterruptHandler() {
+  fd_set readfds;
   // Ctrl-C sends ETX in Zircon.
-  while (getchar() != 0x03);
+  do {
+    FD_ZERO(&readfds);
+    FD_SET(STDIN_FILENO, &readfds);
+    select(STDIN_FILENO + 1, &readfds, nullptr, nullptr, nullptr);
+  } while(!FD_ISSET(STDIN_FILENO, &readfds) || getchar() != 0x03);
   Fuzzer::StaticInterruptCallback();
 }
 




More information about the llvm-commits mailing list