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 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);
|
rustrt::set_min_stack(stack_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#define KLOG_(...) \
|
#define KLOG_(...) \
|
||||||
KLOG(this, kern, __VA_ARGS__)
|
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) :
|
rust_kernel::rust_kernel(rust_srv *srv, size_t num_threads) :
|
||||||
_region(srv, true),
|
_region(srv, true),
|
||||||
@@ -284,9 +286,9 @@ rust_kernel::win32_require(LPCTSTR fn, BOOL ok) {
|
|||||||
NULL, err,
|
NULL, err,
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
(LPTSTR) &buf, 0, NULL );
|
(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);
|
LocalFree((HLOCAL)buf);
|
||||||
I(sched, ok);
|
I(this, ok);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -91,6 +91,12 @@ struct rust_scheduler : public kernel_owned<rust_scheduler>,
|
|||||||
rust_task *create_task(rust_task *spawner, const char *name);
|
rust_task *create_task(rust_task *spawner, const char *name);
|
||||||
|
|
||||||
virtual void run();
|
virtual void run();
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
inline void win32_require(LPCTSTR fn, BOOL ok) {
|
||||||
|
kernel->win32_require(fn, ok);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
inline rust_log &
|
inline rust_log &
|
||||||
|
|||||||
@@ -135,15 +135,15 @@ isaac_init(sched_or_kernel *sched, randctx *rctx)
|
|||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
{
|
{
|
||||||
HCRYPTPROV hProv;
|
HCRYPTPROV hProv;
|
||||||
sched->kernel->win32_require
|
sched->win32_require
|
||||||
(_T("CryptAcquireContext"),
|
(_T("CryptAcquireContext"),
|
||||||
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
|
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
|
||||||
CRYPT_VERIFYCONTEXT|CRYPT_SILENT));
|
CRYPT_VERIFYCONTEXT|CRYPT_SILENT));
|
||||||
sched->kernel->win32_require
|
sched->win32_require
|
||||||
(_T("CryptGenRandom"),
|
(_T("CryptGenRandom"),
|
||||||
CryptGenRandom(hProv, sizeof(rctx->randrsl),
|
CryptGenRandom(hProv, sizeof(rctx->randrsl),
|
||||||
(BYTE*)(&rctx->randrsl)));
|
(BYTE*)(&rctx->randrsl)));
|
||||||
sched->kernel->win32_require
|
sched->win32_require
|
||||||
(_T("CryptReleaseContext"),
|
(_T("CryptReleaseContext"),
|
||||||
CryptReleaseContext(hProv, 0));
|
CryptReleaseContext(hProv, 0));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ bool lock_and_signal::timed_wait(size_t timeout_in_ns) {
|
|||||||
bool rv = true;
|
bool rv = true;
|
||||||
#if defined(__WIN32__)
|
#if defined(__WIN32__)
|
||||||
LeaveCriticalSection(&_cs);
|
LeaveCriticalSection(&_cs);
|
||||||
WaitForSingleObject(_event, INFINITE);
|
DWORD timeout = timeout_in_ns == 0 ? INFINITE : timeout_in_ns / 1000000;
|
||||||
|
rv = WaitForSingleObject(_event, timeout) != WAIT_TIMEOUT;
|
||||||
EnterCriticalSection(&_cs);
|
EnterCriticalSection(&_cs);
|
||||||
_holding_thread = GetCurrentThreadId();
|
_holding_thread = GetCurrentThreadId();
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user