Skip to content

Commit

Permalink
Merge pull request #9730 from kjellwinblad/kjell/fix/resource_atom_le…
Browse files Browse the repository at this point in the history
…ak/EMQX-8583

fix: remove atom leaks
  • Loading branch information
kjellwinblad committed Jan 13, 2023
2 parents bb3dceb + 734e6b9 commit 1ac03ab
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 85 deletions.
23 changes: 12 additions & 11 deletions apps/emqx_resource/src/emqx_resource_manager.erl
Expand Up @@ -54,7 +54,7 @@

% State record
-record(data, {
id, manager_id, group, mod, callback_mode, query_mode, config, opts, status, state, error
id, manager_id, group, mod, callback_mode, query_mode, config, opts, status, state, error, pid
}).
-type data() :: #data{}.

Expand Down Expand Up @@ -296,17 +296,16 @@ start_link(MgrId, ResId, Group, ResourceType, Config, Opts) ->
state = undefined,
error = undefined
},
Module = atom_to_binary(?MODULE),
ProcName = binary_to_atom(<<Module/binary, "_", MgrId/binary>>, utf8),
gen_statem:start_link({local, ProcName}, ?MODULE, {Data, Opts}, []).
gen_statem:start_link(?MODULE, {Data, Opts}, []).

init({Data, Opts}) ->
process_flag(trap_exit, true),
%% init the cache so that lookup/1 will always return something
insert_cache(Data#data.id, Data#data.group, Data),
DataWithPid = Data#data{pid = self()},
insert_cache(DataWithPid#data.id, DataWithPid#data.group, DataWithPid),
case maps:get(start_after_created, Opts, ?START_AFTER_CREATED) of
true -> {ok, connecting, Data, {next_event, internal, start_resource}};
false -> {ok, stopped, Data}
true -> {ok, connecting, DataWithPid, {next_event, internal, start_resource}};
false -> {ok, stopped, DataWithPid}
end.

terminate(_Reason, _State, Data) ->
Expand Down Expand Up @@ -649,10 +648,12 @@ do_wait_for_ready(ResId, Retry) ->

safe_call(ResId, Message, Timeout) ->
try
Module = atom_to_binary(?MODULE),
MgrId = get_owner(ResId),
ProcName = binary_to_existing_atom(<<Module/binary, "_", MgrId/binary>>, utf8),
gen_statem:call(ProcName, Message, {clean_timeout, Timeout})
case read_cache(ResId) of
not_found ->
{error, not_found};
{_, #data{pid = ManagerPid}} ->
gen_statem:call(ManagerPid, Message, {clean_timeout, Timeout})
end
catch
error:badarg ->
{error, not_found};
Expand Down

0 comments on commit 1ac03ab

Please sign in to comment.