Index: runtime/vm/allocation.cc |
=================================================================== |
--- runtime/vm/allocation.cc (revision 3743) |
+++ runtime/vm/allocation.cc (working copy) |
@@ -10,16 +10,25 @@ |
namespace dart { |
-StackResource::StackResource(Isolate* isolate) : isolate_(isolate) { |
- previous_ = isolate->top_resource(); |
- isolate->set_top_resource(this); |
+StackResource::StackResource(Isolate* isolate) |
+ : isolate_(isolate), previous_(NULL) { |
+ // We can only have longjumps and exceptions when there is a current |
+ // isolate. If there is no current isolate, we don't need to |
+ // protect this case. |
+ if (isolate) { |
+ previous_ = isolate->top_resource(); |
+ isolate->set_top_resource(this); |
+ } |
} |
StackResource::~StackResource() { |
- StackResource* top = isolate()->top_resource(); |
- ASSERT(top == this); |
- isolate()->set_top_resource(previous_); |
+ if (isolate()) { |
+ StackResource* top = isolate()->top_resource(); |
+ ASSERT(top == this); |
+ isolate()->set_top_resource(previous_); |
+ } |
+ ASSERT(Isolate::Current() == isolate()); |
} |
ZoneAllocated::~ZoneAllocated() { |