aboutsummaryrefslogtreecommitdiff
path: root/src/rt/rust_message.cpp
diff options
context:
space:
mode:
authorMichael Bebenita <[email protected]>2010-08-17 23:40:07 -0700
committerMichael Bebenita <[email protected]>2010-08-17 23:49:57 -0700
commit2c1ec6771bd09266308686ab13ca32e2aa73da49 (patch)
treeacbcae9da89c0f6d37fccdf8b4091f003e798683 /src/rt/rust_message.cpp
parentAdd a "special" rust_log flag to be used for debugging in cases where the ful... (diff)
downloadrust-2c1ec6771bd09266308686ab13ca32e2aa73da49.tar.xz
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 1de804c9..b6b7fbf0 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);
}