瀏覽代碼

Use sched_yield when sleeping with msecs == 0

Jeremy Soller 4 年之前
父節點
當前提交
7012c262f0
共有 1 個文件被更改,包括 9 次插入5 次删除
  1. 9 5
      src/platform/pte.rs

+ 9 - 5
src/platform/pte.rs

@@ -249,11 +249,15 @@ pub unsafe extern "C" fn pte_osThreadCheckCancel(handle: pte_osThreadHandle) ->
 
 #[no_mangle]
 pub unsafe extern "C" fn pte_osThreadSleep(msecs: c_uint) {
-    let tm = timespec {
-        tv_sec: msecs as i64 / 1000,
-        tv_nsec: (msecs % 1000) as i64 * 1000000,
-    };
-    Sys::nanosleep(&tm, ptr::null_mut());
+    if msecs == 0 {
+        Sys::sched_yield();
+    } else {
+        let tm = timespec {
+            tv_sec: msecs as i64 / 1000,
+            tv_nsec: (msecs % 1000) as i64 * 1000000,
+        };
+        Sys::nanosleep(&tm, ptr::null_mut());
+    }
 }
 
 #[no_mangle]