diff --git a/src/lib/task.rs b/src/lib/task.rs index 62fff2cfc758..1936cf209719 100644 --- a/src/lib/task.rs +++ b/src/lib/task.rs @@ -42,7 +42,7 @@ fn send[T](c: chan[T], v: &T) { c <| v; } fn recv[T](p: port[T]) -> T { let v; p |> v; v } -fn set_min_stack(uint stack_size) { +fn set_min_stack(stack_size : uint) { rustrt::set_min_stack(stack_size); } diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index a1b101ae9d40..8839f7fe6af8 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -2,6 +2,8 @@ #define KLOG_(...) \ KLOG(this, kern, __VA_ARGS__) +#define KLOG_ERR_(field, ...) \ + KLOG_LVL(this, field, log_err, __VA_ARGS__) rust_kernel::rust_kernel(rust_srv *srv, size_t num_threads) : _region(srv, true), @@ -284,9 +286,9 @@ rust_kernel::win32_require(LPCTSTR fn, BOOL ok) { NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL ); - DLOG_ERR(sched, dom, "%s failed with error %ld: %s", fn, err, buf); + KLOG_ERR_(dom, "%s failed with error %ld: %s", fn, err, buf); LocalFree((HLOCAL)buf); - I(sched, ok); + I(this, ok); } } #endif diff --git a/src/rt/rust_scheduler.h b/src/rt/rust_scheduler.h index c53e6157f06b..9289883ab1e6 100644 --- a/src/rt/rust_scheduler.h +++ b/src/rt/rust_scheduler.h @@ -91,6 +91,12 @@ struct rust_scheduler : public kernel_owned, rust_task *create_task(rust_task *spawner, const char *name); virtual void run(); + +#ifdef __WIN32__ + inline void win32_require(LPCTSTR fn, BOOL ok) { + kernel->win32_require(fn, ok); + } +#endif }; inline rust_log & diff --git a/src/rt/rust_util.h b/src/rt/rust_util.h index 89e7f2e7beda..c46f19165737 100644 --- a/src/rt/rust_util.h +++ b/src/rt/rust_util.h @@ -135,15 +135,15 @@ isaac_init(sched_or_kernel *sched, randctx *rctx) #ifdef __WIN32__ { HCRYPTPROV hProv; - sched->kernel->win32_require + sched->win32_require (_T("CryptAcquireContext"), CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT|CRYPT_SILENT)); - sched->kernel->win32_require + sched->win32_require (_T("CryptGenRandom"), CryptGenRandom(hProv, sizeof(rctx->randrsl), (BYTE*)(&rctx->randrsl))); - sched->kernel->win32_require + sched->win32_require (_T("CryptReleaseContext"), CryptReleaseContext(hProv, 0)); } diff --git a/src/rt/sync/lock_and_signal.cpp b/src/rt/sync/lock_and_signal.cpp index 67f6b107b3a4..df596c65cb2f 100644 --- a/src/rt/sync/lock_and_signal.cpp +++ b/src/rt/sync/lock_and_signal.cpp @@ -73,7 +73,8 @@ bool lock_and_signal::timed_wait(size_t timeout_in_ns) { bool rv = true; #if defined(__WIN32__) LeaveCriticalSection(&_cs); - WaitForSingleObject(_event, INFINITE); + DWORD timeout = timeout_in_ns == 0 ? INFINITE : timeout_in_ns / 1000000; + rv = WaitForSingleObject(_event, timeout) != WAIT_TIMEOUT; EnterCriticalSection(&_cs); _holding_thread = GetCurrentThreadId(); #else