From 2c1ec6771bd09266308686ab13ca32e2aa73da49 Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Tue, 17 Aug 2010 23:40:07 -0700 Subject: 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. --- src/rt/rust_message.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/rt/rust_message.cpp') 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_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 *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); } -- cgit 1.4.1-3-g733a5