aboutsummaryrefslogtreecommitdiffstats
path: root/executor
diff options
context:
space:
mode:
Diffstat (limited to 'executor')
-rw-r--r--executor/common.h2
-rw-r--r--executor/common_test.h9
-rw-r--r--executor/executor.cc2
3 files changed, 11 insertions, 2 deletions
diff --git a/executor/common.h b/executor/common.h
index 7fd4b255e..81ddefd01 100644
--- a/executor/common.h
+++ b/executor/common.h
@@ -151,7 +151,7 @@ static void kill_and_wait(int pid, int* status)
#if !GOOS_windows
#if SYZ_EXECUTOR || SYZ_THREADED || SYZ_REPEAT && SYZ_EXECUTOR_USES_FORK_SERVER || \
- __NR_syz_usb_connect || __NR_syz_usb_connect_ath9k
+ __NR_syz_usb_connect || __NR_syz_usb_connect_ath9k || __NR_syz_sleep_ms
static void sleep_ms(uint64 ms)
{
usleep(ms * 1000);
diff --git a/executor/common_test.h b/executor/common_test.h
index ebbff1517..9d9adc36f 100644
--- a/executor/common_test.h
+++ b/executor/common_test.h
@@ -36,6 +36,15 @@ static long syz_exit(volatile long status)
}
#endif
+#if SYZ_EXECUTOR || __NR_syz_sleep_ms
+// syz_sleep_ms(ms intptr)
+static long syz_sleep_ms(volatile long ms)
+{
+ sleep_ms(ms);
+ return 0;
+}
+#endif
+
#if SYZ_EXECUTOR || __NR_syz_compare
#include <errno.h>
#include <string.h>
diff --git a/executor/executor.cc b/executor/executor.cc
index ca24ffd07..e63f9b224 100644
--- a/executor/executor.cc
+++ b/executor/executor.cc
@@ -950,7 +950,7 @@ void copyout_call_results(thread_t* th)
void write_call_output(thread_t* th, bool finished)
{
uint32 reserrno = 999;
- const bool blocked = th != last_scheduled;
+ const bool blocked = finished && th != last_scheduled;
uint32 call_flags = call_flag_executed | (blocked ? call_flag_blocked : 0);
if (finished) {
reserrno = th->res != -1 ? 0 : th->reserrno;