Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(760)

Unified Diff: runtime/vm/isolate.h

Issue 8851008: Add support for interrupting an isolate in the vm. Interrupts are (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/isolate.h
===================================================================
--- runtime/vm/isolate.h (revision 2528)
+++ runtime/vm/isolate.h (working copy)
@@ -23,7 +23,7 @@
class Heap;
class LongJump;
class MessageQueue;
-class Monitor;
+class Mutex;
class ObjectPointerVisitor;
class ObjectStore;
class RawContext;
@@ -219,18 +219,30 @@
library_tag_handler_ = value;
}
- static void SetCreateCallback(Dart_IsolateCreateCallback cback);
- static Dart_IsolateCreateCallback CreateCallback();
+ void SetStackLimit(uword value);
+ void SetStackLimitFromCurrentTOS(uword isolate_stack_top);
uword stack_limit_address() const {
return reinterpret_cast<uword>(&stack_limit_);
}
- void SetStackLimit(uword value);
+ // The current stack limit. This may be overwritten with a special
+ // value to trigger interrupts.
uword stack_limit() const { return stack_limit_; }
- void SetStackLimitFromCurrentTOS(uword isolate_stack_top);
+ // The true stack limit for this isolate. This does not change
+ // after isolate initialization.
+ uword saved_stack_limit() const { return saved_stack_limit_; }
+ enum {
+ kInterruptsMask = 0x1,
+ kApiInterrupt = 0x1, // An interrupt from Dart_InterruptIsolate.
+ // More interrupt types will go here.
+ };
+
+ void ScheduleInterrupts(uword interrupt_bits);
+ uword GetAndClearInterrupts();
+
// Returns null on success, unhandled exception on failure.
RawObject* StandardRunLoop();
@@ -239,6 +251,12 @@
Debugger* debugger() const { return debugger_; }
+ static void SetCreateCallback(Dart_IsolateCreateCallback cback);
+ static Dart_IsolateCreateCallback CreateCallback();
+
+ static void SetInterruptCallback(Dart_IsolateInterruptCallback cback);
+ static Dart_IsolateInterruptCallback InterruptCallback();
+
private:
Isolate();
@@ -250,7 +268,6 @@
static const uword kDefaultStackSize = (1 * MB);
StoreBufferBlock store_buffer_;
- Monitor* monitor_;
MessageQueue* message_queue_;
Dart_PostMessageCallback post_message_callback_;
Dart_ClosePortCallback close_port_callback_;
@@ -278,10 +295,13 @@
Debugger* debugger_;
LongJump* long_jump_base_;
TimerList timer_list_;
+ intptr_t ast_node_id_;
+ Mutex* mutex_; // protects stack_limit_ and saved_stack_limit_.
uword stack_limit_;
- intptr_t ast_node_id_;
+ uword saved_stack_limit_;
static Dart_IsolateCreateCallback create_callback_;
+ static Dart_IsolateInterruptCallback interrupt_callback_;
DISALLOW_COPY_AND_ASSIGN(Isolate);
};

Powered by Google App Engine
This is Rietveld 408576698