Rémi found a regression caused by that patch. His analysis suggests that it's probably correct for NtYieldExecution() to map to sched_yield().
Let's revert the patch and fix the issue in a slightly different way.
This reverts commit b1a79c6b9c3ada0c34b1411b60879962f1815e4d.
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- configure.ac | 1 + dlls/ntdll/unix/sync.c | 6 +++++- include/config.h.in | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac index 6631d2f42fc..72018825610 100644 --- a/configure.ac +++ b/configure.ac @@ -1948,6 +1948,7 @@ AC_CHECK_FUNCS(\ posix_fallocate \ prctl \ proc_pidinfo \ + sched_yield \ setproctitle \ setprogname \ sigprocmask \ diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c index 0065f265e42..137d8d2c87d 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -1447,8 +1447,12 @@ NTSTATUS WINAPI NtSignalAndWaitForSingleObject( HANDLE signal, HANDLE wait, */ NTSTATUS WINAPI NtYieldExecution(void) { - usleep(0); +#ifdef HAVE_SCHED_YIELD + sched_yield(); return STATUS_SUCCESS; +#else + return STATUS_NO_YIELD_PERFORMED; +#endif }
diff --git a/include/config.h.in b/include/config.h.in index 0c843a0423c..0fe50e8ce7c 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -443,6 +443,9 @@ /* Define to 1 if you have the `sched_setaffinity' function. */ #undef HAVE_SCHED_SETAFFINITY
+/* Define to 1 if you have the `sched_yield' function. */ +#undef HAVE_SCHED_YIELD + /* Define to 1 if `cmd' is a member of `scsireq_t'. */ #undef HAVE_SCSIREQ_T_CMD