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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions