Updating to work on Windows.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -91,6 +91,12 @@ struct rust_scheduler : public kernel_owned<rust_scheduler>,
|
||||
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 &
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user