Updating to work on Windows.

This commit is contained in:
Eric Holk
2011-07-28 10:41:48 -07:00
parent 9618ab67ae
commit 3d7016ae95
5 changed files with 16 additions and 7 deletions

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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 &

View File

@@ -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));
} }

View File

@@ -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