mirror of
https://github.com/dart-lang/sdk
synced 2024-10-15 00:04:55 +00:00
4f30b5c9b5
The exception contains retaining path that looks like this: ``` Invalid argument(s): Illegal argument in isolate message: (object extends NativeWrapper - Library:'dart:io' Class: _RandomAccessFileOpsImpl@14069316) <- Library:'dart:io' Class: _RandomAccessFile@14069316 <- Library:'file:///vm/dart/isolates/send_unsupported_objects_test.dart' Class: SomeLog <- Library:'file:///vm/dart/isolates/send_unsupported_objects_test.dart' Class: SomeState <- Class: Context <- Library:'dart:core' Class: _Closure@0150898 ``` BUG=https://github.com/dart-lang/sdk/issues/51115 BUG=https://github.com/dart-lang/sdk/issues/48592 TEST=send_unsupported_objects_test Change-Id: I022e693adccf43a7d2c95e1c7283fd7f210cf1d7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280523 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
52 lines
1.6 KiB
C++
52 lines
1.6 KiB
C++
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef RUNTIME_VM_OBJECT_GRAPH_COPY_H_
|
|
#define RUNTIME_VM_OBJECT_GRAPH_COPY_H_
|
|
|
|
namespace dart {
|
|
|
|
class Isolate;
|
|
class Object;
|
|
class ObjectPtr;
|
|
class Zone;
|
|
|
|
// Whether the object can safely be shared across isolates due to it being
|
|
// deeply immutable.
|
|
bool CanShareObjectAcrossIsolates(ObjectPtr obj);
|
|
|
|
// Makes a transitive copy of the object graph referenced by [object]. Will not
|
|
// copy objects that can be safely shared - due to being immutable.
|
|
//
|
|
// The result will be an array of length 3 of the format
|
|
//
|
|
// [
|
|
// <message>,
|
|
// <collection-lib-objects-to-rehash>,
|
|
// <core-lib-objects-to-rehash>,
|
|
// ]
|
|
//
|
|
// If the array of objects to rehash is not `null` the receiver should re-hash
|
|
// those objects.
|
|
ObjectPtr CopyMutableObjectGraph(const Object& root);
|
|
|
|
typedef enum {
|
|
kInternalToIsolateGroup,
|
|
kExternalBetweenIsolateGroups,
|
|
} TraversalRules;
|
|
|
|
// Returns a string representation of a retaining path from `from` to `to`,
|
|
// blank string if `to` is not reachable from `from`.
|
|
// Traversal doesn't follow all the object graph links, only those
|
|
// that makes sense isolate message passing.
|
|
const char* FindRetainingPath(Zone* zone,
|
|
Isolate* isolate,
|
|
const Object& from,
|
|
const Object& to,
|
|
TraversalRules traversal_rules);
|
|
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_VM_OBJECT_GRAPH_COPY_H_
|