about summary refs log tree commit diff
path: root/src/rt/rust_message.cpp
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@mozilla.com>2010-08-17 23:40:07 -0700
committerMichael Bebenita <mbebenita@mozilla.com>2010-08-17 23:49:57 -0700
commit2c1ec6771bd09266308686ab13ca32e2aa73da49 (patch)
treeacbcae9da89c0f6d37fccdf8b4091f003e798683 /src/rt/rust_message.cpp
parent9fa2b53d8c41cd717ed470926a746bdbff98dc35 (diff)
downloadrust-2c1ec6771bd09266308686ab13ca32e2aa73da49.tar.gz
rust-2c1ec6771bd09266308686ab13ca32e2aa73da49.zip
Lots of changes around memory managment in the Runtime. Added memory regions and fixed race caused by calling rust_srv::malloc() from multiple threads when sending messages.
Diffstat (limited to 'src/rt/rust_message.cpp')
-rw-r--r--src/rt/rust_message.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/rt/rust_message.cpp b/src/rt/rust_message.cpp
index 1de804c9dec..b6b7fbf07e0 100644
--- a/src/rt/rust_message.cpp
+++ b/src/rt/rust_message.cpp
@@ -3,7 +3,8 @@
 
 rust_message::
 rust_message(const char* label, rust_task *source, rust_task *target) :
-             dom(target->dom), label(label),
+             label(label),
+             _dom(target->dom),
              _source(source),
              _target(target) {
 }
@@ -12,12 +13,12 @@ rust_message::~rust_message() {
 }
 
 void rust_message::process() {
-    I(dom, false);
+    I(_dom, false);
 }
 
 rust_proxy<rust_task> *
 rust_message::get_source_proxy() {
-    return dom->get_task_proxy(_source);
+    return _dom->get_task_proxy(_source);
 }
 
 notify_message::
@@ -50,8 +51,9 @@ send(notification_type type, const char* label, rust_task *source,
      rust_proxy<rust_task> *target) {
     rust_task *target_task = target->delegate();
     rust_dom *target_domain = target_task->dom;
-    notify_message *message = new (target_domain)
-        notify_message(type, label, source, target_task);
+    notify_message *message =
+        new (target_domain, memory_region::SYNCHRONIZED) notify_message(type,
+            label, source, target_task);
     target_domain->send_message(message);
 }
 
@@ -83,9 +85,10 @@ send(uint8_t *buffer, size_t buffer_sz, const char* label, rust_task *source,
     rust_task *target_task = target->delegate();
     rust_port *target_port = port->delegate();
     rust_dom *target_domain = target_task->dom;
-    data_message *message = new (target_domain)
-        data_message(buffer, buffer_sz, label, source,
-                     target_task, target_port);
+    data_message *message =
+        new (target_domain, memory_region::SYNCHRONIZED)
+            data_message(buffer, buffer_sz, label, source,
+                target_task, target_port);
     target_domain->send_message(message);
 }