Index: runtime/vm/allocation.cc |
=================================================================== |
--- runtime/vm/allocation.cc (revision 3743) |
+++ runtime/vm/allocation.cc (working copy) |
@@ -10,16 +10,28 @@ |
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 is no current isolate, we don't need to |
siva
2012/02/01 00:38:56
"is no" twice?
turnidge
2012/02/01 18:51:27
Done.
|
+ // 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_); |
+ } else { |
+ // If there was no current isolate when we created the resource, |
+ // there should be no current isolate when it is destroyed. |
+ ASSERT(Isolate::Current() == NULL); |
+ } |
siva
2012/02/01 00:38:56
Could we have a generic assert
ASSERT(Isolate::Cur
turnidge
2012/02/01 18:51:27
Good idea. Done.
|
} |
ZoneAllocated::~ZoneAllocated() { |