Skip to content

Commit 790d0b6

Browse files
rmacnak-googlecommit-bot@chromium.org
authored andcommitted
[vm] Account for Out Of Memory during isolate message deserialization.
TEST=run test harness with low heap limit Change-Id: I75d3b2e8461bcf99cc41eb3ad76173bc1976bbd9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/213538 Reviewed-by: Alexander Aprelev <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent 5110d82 commit 790d0b6

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

runtime/vm/longjump.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ class Error;
1616

1717
class LongJumpScope : public StackResource {
1818
public:
19-
LongJumpScope()
20-
: StackResource(ThreadState::Current()),
21-
top_(nullptr),
22-
base_(thread()->long_jump_base()) {
23-
thread()->set_long_jump_base(this);
19+
explicit LongJumpScope(ThreadState* thread = ThreadState::Current())
20+
: StackResource(thread), top_(nullptr), base_(thread->long_jump_base()) {
21+
thread->set_long_jump_base(this);
2422
}
2523

2624
~LongJumpScope() {

runtime/vm/message_snapshot.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3745,7 +3745,7 @@ std::unique_ptr<Message> WriteMessage(bool can_send_any_object,
37453745

37463746
volatile bool has_exception = false;
37473747
{
3748-
LongJumpScope jump;
3748+
LongJumpScope jump(thread);
37493749
if (setjmp(*jump.Set()) == 0) {
37503750
serializer.Serialize(obj);
37513751
} else {
@@ -3820,8 +3820,13 @@ ObjectPtr ReadMessage(Thread* thread, Message* message) {
38203820
return ReadObjectGraphCopyMessage(thread, message->persistent_handle());
38213821
} else {
38223822
RELEASE_ASSERT(message->IsSnapshot());
3823-
MessageDeserializer deserializer(thread, message);
3824-
return deserializer.Deserialize();
3823+
LongJumpScope jump(thread);
3824+
if (setjmp(*jump.Set()) == 0) {
3825+
MessageDeserializer deserializer(thread, message);
3826+
return deserializer.Deserialize();
3827+
} else {
3828+
return thread->StealStickyError();
3829+
}
38253830
}
38263831
}
38273832

0 commit comments

Comments
 (0)