Fix: benign gen_server start race crash reports#2172
Open
petermm wants to merge 1 commit intoatomvm:mainfrom
Open
Fix: benign gen_server start race crash reports#2172petermm wants to merge 1 commit intoatomvm:mainfrom
petermm wants to merge 1 commit intoatomvm:mainfrom
Conversation
This typically happens, due to timer_manager startup race for say:
:erlang.send_after(1, self(), :show_hello)
:erlang.send_after(5000, self(), :show_cat)
Avoid emitting a crash report in gen_server:init_it/5 when erlang:register/2 loses a race to another process and whereis(Name) returns an existing pid.
This keeps {error, {already_started, Pid}} behavior unchanged for callers, while preserving crash reports for genuine registration failures where the name is still undefined.
Signed-off-by: Peter M <petermm@gmail.com>
0d8eff7 to
97da9c7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1001
This typically happens, due to timer_manager startup race for say:
Or when starting up an Supervisor tree with lots of things going on:
And is very confusing! and can send one on wild goose hunts for what looks like a crash - but is normal behaviour.
I have test at hand that captures io output etc - but it seems extensive and perhaps flappy prone to have a 400 line test for this.
Avoid emitting a crash report in gen_server:init_it/5 when erlang:register/2 loses a race to another process and whereis(Name) returns an existing pid.
This keeps {error, {already_started, Pid}} behavior unchanged for callers, while preserving crash reports for genuine registration failures where the name is still undefined.
These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).
SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later