From 4ff8e15128f90d4e9e57897c48280c6f82bb8343 Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Wed, 28 Jul 2010 16:24:50 -0700 Subject: Move notification-messages out into their own file and unify into notify_message, make them use proxies, cache task proxies in dom. --- src/rt/rust_message.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/rt/rust_message.h (limited to 'src/rt/rust_message.h') diff --git a/src/rt/rust_message.h b/src/rt/rust_message.h new file mode 100644 index 00000000..f0c6bc0a --- /dev/null +++ b/src/rt/rust_message.h @@ -0,0 +1,72 @@ +#ifndef RUST_MESSAGE_H +#define RUST_MESSAGE_H + +/** + * Rust messages are used for inter-thread communication. They are enqueued + * and allocated in the target domain. + */ + +/** + * Abstract base class for all message types. + */ +class rust_message : public lock_free_queue_node, + public dom_owned { +public: + rust_dom *dom; + const char* label; +private: + rust_task *_source; +protected: + rust_task *_target; +public: + rust_message(const char* label, rust_task *source, rust_task *target); + virtual ~rust_message(); + + /** + * We can only access the source task through a proxy, so create one + * on demand if we need it. + */ + rust_proxy *get_source_proxy(); + + /** + * Processes the message in the target domain thread. + */ + virtual void process(); +}; + +/** + * Notify messages are simple argument-less messages. + */ +class notify_message : public rust_message { +public: + enum notification_type { + KILL, JOIN, WAKEUP + }; + + const notification_type type; + + notify_message(notification_type type, const char* label, + rust_task *source, rust_task *target); + + void process(); + + /** + * This code executes in the sending domain's thread. + */ + static void + send(notification_type type, const char* label, rust_task *source, + rust_proxy *target); +}; + +// +// Local Variables: +// mode: C++ +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: +// + +#endif /* RUST_MESSAGE_H */ -- cgit v1.2.3