dart-sdk/runtime/lib
Martin Kustermann 06b2967188 [vm] Disentagle PortMap/MessageHandler from port status tracking
The main purpose of the low-level [PortMap] is to coordinate between
ports being opened & closed and concurrent message senders. That's the
only thing it should do.

Each isolate owns [ReceivePort]s. Only the isolate mutator can create
ports, delete them or change their "keeps-isolate-alive" state. Right
now it requires going via [PortMap] (which acquires lock) and
[MessageHandler] (which acquires lock) to change the
"keeps-isolate-alive" state of a port.

We'll move information whether a dart [ReceivePort] is closed and
whether it keeps the isolate alive into the [ReceivePort] object itself.

=> Changing the "keeps-isolate-alive" state of the port no longer
requires any locks. We could even avoid the runtime call itself in a
future CL.

Isolates are kept alive if there's any open receive ports (that have not
been marked as "does not keep isolate alive"). This is a property of an
isolate not of the message handler. For native message handlers we do
have a 1<->1 correspondence between port and handler (i.e. there's no
"number of open ports" tracking needed).

=> We'll move the logic of counting open receive ports and ports that
keep the isolate alive to the [Isolate].
=> We'll also remove locking around incrementing/decrementing or
accessing the counts.
=> The [IsolateMessageHandler] will ask the [Isolate] whether there's
any open ports for determining whether to shut down.
=> For native ports, the `Dart_NewNativePort()` & `Dart_CloseNativePort()`
functions will manage the lifetime (as their name also suggests).

Overall this makes the [Isolate] responsible for creation of dart
[ReceivePort]s and tracking whether the isolate should be kept alive:
  * Isolate::CreateReceivePort()
  * Isolate::SetReceivePortKeepAliveState()
  * Isolate::CloseReceivePort()

TEST=ci

Change-Id: I847ae357c26254d3810cc277962e05deca18a1de
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/317960
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2023-08-08 10:57:47 +00:00
..
array.cc Spelling pkg dev compiler 2023-01-26 09:12:41 +00:00
async.cc [vm] Remove old async_debugger flag. 2023-06-27 07:18:50 +00:00
async_sources.gni
bool.cc
convert_sources.gni
core_sources.gni
date.cc [vm] Remove dead _localTimeZoneAdjustmentInSeconds. 2022-07-19 17:29:04 +00:00
developer.cc [dart:developer] Add static Service.getObjectId method 2023-08-04 14:18:38 +00:00
developer_sources.gni
double.cc [vm] Update to constexpr in runtime/platform and lib. 2023-04-11 17:43:58 +00:00
errors.cc [vm] Update NULL to nullptr in runtime/lib. 2023-03-30 19:28:28 +00:00
ffi.cc [vm] Async FFI callbacks 2023-06-28 01:00:18 +00:00
ffi_dynamic_library.cc [vm/ffi] Add DynamicLibrary.close() 2023-06-15 17:19:37 +00:00
ffi_sources.gni
function.cc [vm] Fix equality of uninstantiated generic closures 2023-03-08 21:44:56 +00:00
growable_array.cc Revert part of "[vm] Allow sharing of deeply immutable lists across isolates" 2023-02-10 20:25:59 +00:00
identical.cc
integers.cc [vm] Update NULL to nullptr in runtime/lib. 2023-03-30 19:28:28 +00:00
integers.h [vm] Better implementation of hashCode function. 2022-10-20 20:31:20 +00:00
invocation_mirror.h
isolate.cc [vm] Disentagle PortMap/MessageHandler from port status tracking 2023-08-08 10:57:47 +00:00
isolate_sources.gni
libgen_in.cc [vm] Update NULL to nullptr in runtime/lib. 2023-03-30 19:28:28 +00:00
math.cc [vm] Update NULL to nullptr in runtime/lib. 2023-03-30 19:28:28 +00:00
math_sources.gni
mirrors.cc [vm] Cleanup [PatchClass] in the VM 2023-06-29 15:03:37 +00:00
mirrors.h
mirrors_sources.gni
object.cc Reland "Reland "[vm] Unify hash codes in type objects"" 2023-05-26 20:13:17 +00:00
profiler.cc
profiler_sources.gni
regexp.cc [vm/regexp] Name generated Regexp function with actual expression. 2023-03-09 03:49:58 +00:00
simd128.cc
stacktrace.cc [vm] Rework awaiter stack unwinding. 2023-06-30 14:03:03 +00:00
stacktrace.h
stopwatch.cc
string.cc [vm] Update to constexpr in runtime/platform and lib. 2023-04-11 17:43:58 +00:00
timeline.cc [VM/Timeline] Store an array of flow IDs in each dart::TimelineEvent 2023-05-26 13:08:27 +00:00
typed_data.cc [build] Default to -O2 instead of -O3. 2023-01-24 00:54:29 +00:00
typed_data_sources.gni
uri.cc
vmservice.cc [vm] Disentagle PortMap/MessageHandler from port status tracking 2023-08-08 10:57:47 +00:00
vmservice_sources.gni