The asynchronous waiting mechanism used by the eventhandler thread
on Fuchsia is inherently level-triggered. However, since the upper
layers of the dart:io socket implementation expect edge-triggering,
the Fuchsia eventhandler has to emulate edge-triggering.
Previously, this edge-triggering was emulated for kInEvent and
kOutEvent, but not kCloseEvent. It was not thought that simulating
edge-triggering for kCloseEvent was necessary since the socket would
soon be going down, and that a few redundant messages would be
harmless. This turned out not to be the case. In practice, the
eventhandler thread may flood the Dart thread with kCloseEvent
messages.
This CL adds the edge-triggering emulation for kCloseEvent. The
Dart thread will no longer be flooded with kCloseEvent messages.
Unfortunately, the eventhandler thread may still spin on Fuchsia's
equivalent of POLLHUP signals until the Dart thread destroys the
socket, as these cannot be unsubscribed from.
Fixes b/150902962
Change-Id: I2784220197771508689504156a761842ac164c8e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143888
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
In many cases, the Mutexes and Monitors have to be marked "mutable"
because they're used to synchronize const accessor methods.
Small text segment improvement for Product builds:
$ size dart.{arm,x64}.{before,after}
text data bss dec hex filename
19726069 409960 392332 20528361 1393ce9 dart.arm.before
19725525 409960 392332 20527817 1393ac9 dart.arm.after
22576021 600376 1782824 24959221 17cd8f5 dart.x64.before
22574821 600376 1782824 24958021 17cd445 dart.x64.after
Change-Id: I68f5cd5ad452044df8bfebd160910496036a3e6b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101745
Commit-Queue: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Read events should only be re-enabled when all available bytes have
been read, or there is an error.
related: FL-109
Change-Id: Iefd4ff3d7f4b79c08ee3d2bca7cdfef70de66ce9
Reviewed-on: https://dart-review.googlesource.com/75200
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
These were left out of order by the mechanical changes that were part
of Fuchsia's Magenta->Zircon rename.
Change-Id: I41c81eb889c6076ffe82102018721e5abc74e7ac
Reviewed-on: https://dart-review.googlesource.com/6165
Reviewed-by: Zach Anderson <zra@google.com>
This CL rewrites the EventHandler on Fuchsia to use
the low-level ports system call API instead of the
epoll() emulation in musl. This will allow the
Magenta team to remove the epoll() emulation and
the deprecated system call API it is based on.
The new ports API doesn't provide epoll()-like
edge-triggering that clients of the EventHandler
expect. Therefore, this CL emulates it by adding
a level of indirection through a new "IOHandle"
object, which the socket code now uses instead
of file descriptors. This is similar to what we do
on Windows. See the comment at the top of
eventhandler_fuchsia.cc for more details.
Fuchsia issue US-251
R=asiva@google.com
Review-Url: https://codereview.chromium.org/2910853002 .
i.e. #ifndef VM_WHATEVER -> #ifndef RUNTIME_VM_WHATEVER
This lets us remove a hack from the PRESUBMIT.py script that existed
for reasons that are no longer valid, and sets us up to add some
presubmit checks for the GN build.
R=asiva@google.com, rmacnak@google.com
Review URL: https://codereview.chromium.org/2450713004 .
This CL adds targets to the GN build that build the standalone Dart VM
without the observatory, and with dart:io enabled but with most of the
functionality stubbed out as UNIMPLEMENTED(). It also adds a simple
eventhandler for Fuchsia for implementing Timers.
R=asiva@google.com, johnmccutchan@google.com
Review URL: https://codereview.chromium.org/2168193002 .