-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VM: deadlock resulting in timeout with get_vm_timeline_rpc_test #25189
Comments
A GC happens during deoptimization (materialization of heap objects). The offending thread tries to relock the time line lock that it already holds itself. (gdb) bt |
Proposed fix (excl. Windows): https://codereview.chromium.org/1515553003 I use a recursive mutex for the time line block lock, so that the current thread does not block when a nested time line events are nested (e.g. deopt What is the reason for not using a recursive mutex by default? Is there a noticable performance cost? Another possibility for this specific instance would be to stop the "Deoptimize" time line event before MaterializeDeferredObjects (where a GC may occur). But I don't think we have a general restriction that time line events can not be nested, right? |
This seems to be a deadlock:
FAILED: none-vm release_ia32 service/get_vm_timeline_rpc_test
Expected: Pass
Actual: Timeout
CommandOutput[vm]:
stdout:
** Launching out/ReleaseIA32/dart --error_on_bad_type --error_on_bad_override --complete_timeline --optimization-counter-threshold=5 --ignore-unrecognized-flags --package-root=out/ReleaseIA32/packages/ --enable-vm-service:0 /mnt/data/b/build/slave/vm-linux-release-optcounter-threshold-be/build/sdk/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart --testee-mode
Observatory listening on http://127.0.0.1:47814
** Signaled to run test queries on 47814
Command[vm]: DART_CONFIGURATION=ReleaseIA32 out/ReleaseIA32/dart --error_on_bad_type --error_on_bad_override --complete_timeline --optimization-counter-threshold=5 --ignore-unrecognized-flags --package-root=out/ReleaseIA32/packages/ /mnt/data/b/build/slave/vm-linux-release-optcounter-threshold-be/build/sdk/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
Took 0:01:00.017000
Short reproduction command (experimental):
python tools/test.py -mrelease -aia32 --write-debug-log --write-test-outcome-log --copy-coredumps --vm-options --optimization-counter-threshold=5 --exclude-suite pkg -t60 service/get_vm_timeline_rpc_test
The text was updated successfully, but these errors were encountered: