| Index: dart/runtime/vm/snapshot.cc
 | 
| ===================================================================
 | 
| --- dart/runtime/vm/snapshot.cc	(revision 31530)
 | 
| +++ dart/runtime/vm/snapshot.cc	(working copy)
 | 
| @@ -167,12 +167,10 @@
 | 
|  
 | 
|  
 | 
|  RawObject* SnapshotReader::ReadObject() {
 | 
| -  // Setup for long jump in case there is an exception while reading.
 | 
| -  LongJump* base = isolate()->long_jump_base();
 | 
| -  LongJump jump;
 | 
| -  isolate()->set_long_jump_base(&jump);
 | 
|    const Instance& null_object = Instance::Handle();
 | 
|    *ErrorHandle() = UnhandledException::New(null_object, null_object);
 | 
| +  // Setup for long jump in case there is an exception while reading.
 | 
| +  LongJumpScope jump;
 | 
|    if (setjmp(*jump.Set()) == 0) {
 | 
|      Object& obj = Object::Handle(ReadObjectImpl());
 | 
|      for (intptr_t i = 0; i < backward_references_.length(); i++) {
 | 
| @@ -181,13 +179,11 @@
 | 
|          backward_references_[i]->set_state(kIsDeserialized);
 | 
|        }
 | 
|      }
 | 
| -    isolate()->set_long_jump_base(base);
 | 
|      return obj.raw();
 | 
|    } else {
 | 
|      // An error occurred while reading, return the error object.
 | 
|      const Error& err = Error::Handle(isolate()->object_store()->sticky_error());
 | 
|      isolate()->object_store()->clear_sticky_error();
 | 
| -    isolate()->set_long_jump_base(base);
 | 
|      return err.raw();
 | 
|    }
 | 
|  }
 | 
| @@ -1082,9 +1078,7 @@
 | 
|  
 | 
|    // Setup for long jump in case there is an exception while writing
 | 
|    // the snapshot.
 | 
| -  LongJump* base = isolate->long_jump_base();
 | 
| -  LongJump jump;
 | 
| -  isolate->set_long_jump_base(&jump);
 | 
| +  LongJumpScope jump;
 | 
|    if (setjmp(*jump.Set()) == 0) {
 | 
|      NoGCScope no_gc;
 | 
|  
 | 
| @@ -1101,10 +1095,7 @@
 | 
|  
 | 
|      FillHeader(kind());
 | 
|      UnmarkAll();
 | 
| -
 | 
| -    isolate->set_long_jump_base(base);
 | 
|    } else {
 | 
| -    isolate->set_long_jump_base(base);
 | 
|      ThrowException(exception_type(), exception_msg());
 | 
|    }
 | 
|  }
 | 
| @@ -1475,9 +1466,7 @@
 | 
|  
 | 
|    // Setup for long jump in case there is an exception while writing
 | 
|    // the snapshot.
 | 
| -  LongJump* base = isolate->long_jump_base();
 | 
| -  LongJump jump;
 | 
| -  isolate->set_long_jump_base(&jump);
 | 
| +  LongJumpScope jump;
 | 
|    if (setjmp(*jump.Set()) == 0) {
 | 
|      // Write out the library object.
 | 
|      NoGCScope no_gc;
 | 
| @@ -1485,9 +1474,7 @@
 | 
|      WriteObject(lib.raw());
 | 
|      FillHeader(kind());
 | 
|      UnmarkAll();
 | 
| -    isolate->set_long_jump_base(base);
 | 
|    } else {
 | 
| -    isolate->set_long_jump_base(base);
 | 
|      ThrowException(exception_type(), exception_msg());
 | 
|    }
 | 
|  }
 | 
| @@ -1512,16 +1499,12 @@
 | 
|  
 | 
|    // Setup for long jump in case there is an exception while writing
 | 
|    // the message.
 | 
| -  LongJump* base = isolate->long_jump_base();
 | 
| -  LongJump jump;
 | 
| -  isolate->set_long_jump_base(&jump);
 | 
| +  LongJumpScope jump;
 | 
|    if (setjmp(*jump.Set()) == 0) {
 | 
|      NoGCScope no_gc;
 | 
|      WriteObject(obj.raw());
 | 
|      UnmarkAll();
 | 
| -    isolate->set_long_jump_base(base);
 | 
|    } else {
 | 
| -    isolate->set_long_jump_base(base);
 | 
|      ThrowException(exception_type(), exception_msg());
 | 
|    }
 | 
|  }
 | 
| 
 |