Matteo Bruni : Revert "ntdll: Implement NtYieldExecution() as usleep().".

Alexandre Julliard julliard at winehq.org
Mon Nov 22 16:05:16 CST 2021


Module: wine
Branch: master
Commit: 3203f056687f62e3d74604da0efb6183989dfab4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3203f056687f62e3d74604da0efb6183989dfab4

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Fri Nov 19 20:50:28 2021 +0100

Revert "ntdll: Implement NtYieldExecution() as usleep().".

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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 configure              | 10 ++++++++--
 configure.ac           |  3 ++-
 dlls/ntdll/unix/sync.c |  6 +++++-
 include/config.h.in    |  3 +++
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/configure b/configure
index 7b215627241..ae5c8e2734e 100755
--- a/configure
+++ b/configure
@@ -1512,7 +1512,6 @@ enable_msv1_0
 enable_msvcirt
 enable_msvcm80
 enable_msvcm90
-enable_msvcp_win
 enable_msvcp100
 enable_msvcp110
 enable_msvcp120
@@ -1524,6 +1523,7 @@ enable_msvcp70
 enable_msvcp71
 enable_msvcp80
 enable_msvcp90
+enable_msvcp_win
 enable_msvcr100
 enable_msvcr110
 enable_msvcr120
@@ -19085,6 +19085,12 @@ if test "x$ac_cv_func_proc_pidinfo" = xyes
 then :
   printf "%s\n" "#define HAVE_PROC_PIDINFO 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "sched_yield" "ac_cv_func_sched_yield"
+if test "x$ac_cv_func_sched_yield" = xyes
+then :
+  printf "%s\n" "#define HAVE_SCHED_YIELD 1" >>confdefs.h
+
 fi
 ac_fn_c_check_func "$LINENO" "setproctitle" "ac_cv_func_setproctitle"
 if test "x$ac_cv_func_setproctitle" = xyes
@@ -21595,7 +21601,6 @@ wine_fn_config_makefile dlls/msvcirt enable_msvcirt
 wine_fn_config_makefile dlls/msvcirt/tests enable_tests
 wine_fn_config_makefile dlls/msvcm80 enable_msvcm80
 wine_fn_config_makefile dlls/msvcm90 enable_msvcm90
-wine_fn_config_makefile dlls/msvcp_win enable_msvcp_win
 wine_fn_config_makefile dlls/msvcp100 enable_msvcp100
 wine_fn_config_makefile dlls/msvcp100/tests enable_tests
 wine_fn_config_makefile dlls/msvcp110 enable_msvcp110
@@ -21614,6 +21619,7 @@ wine_fn_config_makefile dlls/msvcp71 enable_msvcp71
 wine_fn_config_makefile dlls/msvcp80 enable_msvcp80
 wine_fn_config_makefile dlls/msvcp90 enable_msvcp90
 wine_fn_config_makefile dlls/msvcp90/tests enable_tests
+wine_fn_config_makefile dlls/msvcp_win enable_msvcp_win
 wine_fn_config_makefile dlls/msvcr100 enable_msvcr100
 wine_fn_config_makefile dlls/msvcr100/tests enable_tests
 wine_fn_config_makefile dlls/msvcr110 enable_msvcr110
diff --git a/configure.ac b/configure.ac
index 5074ee14833..9c0c8d25d29 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1948,6 +1948,7 @@ AC_CHECK_FUNCS(\
 	posix_fallocate \
 	prctl \
 	proc_pidinfo \
+	sched_yield \
 	setproctitle \
 	setprogname \
 	sigprocmask \
@@ -3133,7 +3134,6 @@ WINE_CONFIG_MAKEFILE(dlls/msvcirt)
 WINE_CONFIG_MAKEFILE(dlls/msvcirt/tests)
 WINE_CONFIG_MAKEFILE(dlls/msvcm80)
 WINE_CONFIG_MAKEFILE(dlls/msvcm90)
-WINE_CONFIG_MAKEFILE(dlls/msvcp_win)
 WINE_CONFIG_MAKEFILE(dlls/msvcp100)
 WINE_CONFIG_MAKEFILE(dlls/msvcp100/tests)
 WINE_CONFIG_MAKEFILE(dlls/msvcp110)
@@ -3152,6 +3152,7 @@ WINE_CONFIG_MAKEFILE(dlls/msvcp71)
 WINE_CONFIG_MAKEFILE(dlls/msvcp80)
 WINE_CONFIG_MAKEFILE(dlls/msvcp90)
 WINE_CONFIG_MAKEFILE(dlls/msvcp90/tests)
+WINE_CONFIG_MAKEFILE(dlls/msvcp_win)
 WINE_CONFIG_MAKEFILE(dlls/msvcr100)
 WINE_CONFIG_MAKEFILE(dlls/msvcr100/tests)
 WINE_CONFIG_MAKEFILE(dlls/msvcr110)
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 7f71b737045..829add0be2d 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
 




More information about the wine-cvs mailing list