[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