about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-07-28 10:41:48 -0700
committerEric Holk <eholk@mozilla.com>2011-07-28 10:47:29 -0700
commit3d7016ae9575a36fd96ec264274bbe0c660a7758 (patch)
tree35ecc1c85c3b818ab8b02101d5b72908e07251b4
parent9618ab67ae8fc6e82bb16e29ea52125acf183fc8 (diff)
downloadrust-3d7016ae9575a36fd96ec264274bbe0c660a7758.tar.gz
rust-3d7016ae9575a36fd96ec264274bbe0c660a7758.zip
Updating to work on Windows.
-rw-r--r--src/lib/task.rs2
-rw-r--r--src/rt/rust_kernel.cpp6
-rw-r--r--src/rt/rust_scheduler.h6
-rw-r--r--src/rt/rust_util.h6
-rw-r--r--src/rt/sync/lock_and_signal.cpp3
5 files changed, 16 insertions, 7 deletions
diff --git a/src/lib/task.rs b/src/lib/task.rs
index 62fff2cfc75..1936cf20971 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 a1b101ae9d4..8839f7fe6af 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 c53e6157f06..9289883ab1e 100644
--- a/src/rt/rust_scheduler.h
+++ b/src/rt/rust_scheduler.h
@@ -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 &
diff --git a/src/rt/rust_util.h b/src/rt/rust_util.h
index 89e7f2e7bed..c46f1916573 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 67f6b107b3a..df596c65cb2 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