Skip to content

Duplicated start_pool handling #348

Description

@bambotza

Hi,
If you try to start the pool which is already started (i. e. due to race condition) you get the following result

(test@localhost)1> gun_pool:start_pool("127.0.0.1", 8090, #{}).
{ok,<0.11205.0>}
(test@localhost)2> gun_pool:start_pool("127.0.0.1", 8090, #{}).
{error,{badmatch,false}}

The returned result could be clearer but it can be handled by user. You get also the nasty crash report:

2025-03-25T14:53:39.111287+01:00 [error] <0.11605.0>@gen_statem:error_info/7:2635 State machine <0.11605.0> terminating. Reason: {badmatch,false}. Stack: [{gun_pool,init,1,[{file,"/_build/default/lib/gun/src/gun_pool.erl"},{line,515}]},{gen_statem,init_it,6,[{file,"gen_statem.erl"},{line,984}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,241}]}]. State: {undefined,undefined}.
2025-03-25T14:53:39.111877+01:00 [error] <0.11605.0>@proc_lib:crash_report/4:584 crasher: initial call: gun_pool:init/1, pid: <0.11605.0>, registered_name: [], error: {{badmatch,false},[{gun_pool,init,1,[{file,"/_build/default/lib/gun/src/gun_pool.erl"},{line,515}]},{gen_statem,init_it,6,[{file,"gen_statem.erl"},{line,984}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,241}]}]}, ancestors: [gun_pools_sup,gun_sup,<0.10161.0>], message_queue_len: 0, messages: [], links: [<0.10164.0>], dictionary: [], trap_exit: true, status: running, heap_size: 4185, stack_size: 28, reductions: 9484; neighbours:

What do you think about changing the restart strategy of gun_pools_sup from simple_one_for_one to one_for_one and using gun_pools_key(Host, Port, Opts) as unique child id. Then the duplicated start_pool call would be handled by supervisor process and result in {error, {already_started, Child :: child()}} error.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions