fix SleepEx(0,false) on Linux (#12057)
authorXiangyang (Mark) Guo <xiangyang.guo@intel.com>
Fri, 2 Jun 2017 18:28:36 +0000 (11:28 -0700)
committerKoundinya Veluri <kouvel@microsoft.com>
Fri, 2 Jun 2017 18:28:36 +0000 (11:28 -0700)
src/pal/src/include/pal/corunix.hpp
src/pal/src/synchmgr/synchmanager.cpp
src/pal/src/synchmgr/synchmanager.hpp
src/pal/src/synchmgr/wait.cpp

index e9e9503ed3cdfd02650e9532007ae16063c890f3..e7f58ed057277fe8b5d98ba13aa83ef84cfa19dc 100644 (file)
@@ -1097,6 +1097,10 @@ namespace CorUnix
             DWORD *pdwSignaledObject       // OUT
             ) = 0;
 
+        virtual
+        void
+        YieldThread() = 0;
+
         virtual
         PAL_ERROR
         AbandonObjectsOwnedByThread(
index 73b5644dbdb8631b82f46d896262cf10c0a4f7f3..a4730cf11fe85c20212407a05ca3e85cc1177f84 100644 (file)
@@ -434,6 +434,11 @@ namespace CorUnix
         return palErr;
     }
 
+    void CPalSynchronizationManager::YieldThread()
+    {
+        sched_yield();
+    }
+
     PAL_ERROR CPalSynchronizationManager::ThreadNativeWait(
         ThreadNativeWaitData * ptnwdNativeWaitData,
         DWORD dwTimeout,
index 883d5b8b61edc60f3045a643c59c55abeb53390d..de8014ba00003401258878a725a9fc49d485bdd6 100644 (file)
@@ -824,6 +824,8 @@ namespace CorUnix
             ThreadWakeupReason *ptwrWakeupReason,
             DWORD *pdwSignaledObject);
 
+        virtual void YieldThread();
+
         virtual PAL_ERROR AbandonObjectsOwnedByThread(
             CPalThread *pthrCurrent,
             CPalThread *pthrTarget);
index 9c4fe3a9ca8f432e7d8b04b24460402761c2f442..8d184e073b07561e95a6e96490c5b8acd7651876 100644 (file)
@@ -702,6 +702,7 @@ DWORD CorUnix::InternalSleepEx (
     }
     else
     {
+        g_pSynchronizationManager->YieldThread();
         dwRet = 0;
     }