mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-28 16:34:13 +01:00
Fix delayed response of a timeout call was reused for next login (EJAB-1385)
This commit is contained in:
parent
f4c74c147b
commit
6e3a9ac4fd
@ -54,7 +54,7 @@ init(ProcessName, ExtPrg) ->
|
|||||||
register(ProcessName, self()),
|
register(ProcessName, self()),
|
||||||
process_flag(trap_exit,true),
|
process_flag(trap_exit,true),
|
||||||
Port = open_port({spawn, ExtPrg}, [{packet,2}]),
|
Port = open_port({spawn, ExtPrg}, [{packet,2}]),
|
||||||
loop(Port, ?INIT_TIMEOUT).
|
loop(Port, ?INIT_TIMEOUT, ProcessName, ExtPrg).
|
||||||
|
|
||||||
stop(Host) ->
|
stop(Host) ->
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
@ -108,23 +108,27 @@ get_instances(Server) ->
|
|||||||
_ -> 1
|
_ -> 1
|
||||||
end.
|
end.
|
||||||
|
|
||||||
loop(Port, Timeout) ->
|
loop(Port, Timeout, ProcessName, ExtPrg) ->
|
||||||
receive
|
receive
|
||||||
{call, Caller, Msg} ->
|
{call, Caller, Msg} ->
|
||||||
Port ! {self(), {command, encode(Msg)}},
|
port_command(Port, encode(Msg)),
|
||||||
receive
|
receive
|
||||||
{Port, {data, Data}} ->
|
{Port, {data, Data}} ->
|
||||||
?DEBUG("extauth call '~p' received data response:~n~p", [Msg, Data]),
|
?DEBUG("extauth call '~p' received data response:~n~p", [Msg, Data]),
|
||||||
Caller ! {eauth, decode(Data)};
|
Caller ! {eauth, decode(Data)},
|
||||||
|
loop(Port, ?CALL_TIMEOUT, ProcessName, ExtPrg);
|
||||||
{Port, Other} ->
|
{Port, Other} ->
|
||||||
?ERROR_MSG("extauth call '~p' received strange response:~n~p", [Msg, Other]),
|
?ERROR_MSG("extauth call '~p' received strange response:~n~p", [Msg, Other]),
|
||||||
Caller ! {eauth, false}
|
Caller ! {eauth, false},
|
||||||
|
loop(Port, ?CALL_TIMEOUT, ProcessName, ExtPrg)
|
||||||
after
|
after
|
||||||
Timeout ->
|
Timeout ->
|
||||||
?ERROR_MSG("extauth call '~p' didn't receive response", [Msg]),
|
?ERROR_MSG("extauth call '~p' didn't receive response", [Msg]),
|
||||||
Caller ! {eauth, false}
|
Caller ! {eauth, false},
|
||||||
end,
|
unregister(ProcessName),
|
||||||
loop(Port, ?CALL_TIMEOUT);
|
spawn(?MODULE, init, [ProcessName, ExtPrg]),
|
||||||
|
exit(port_terminated)
|
||||||
|
end;
|
||||||
stop ->
|
stop ->
|
||||||
Port ! {self(), close},
|
Port ! {self(), close},
|
||||||
receive
|
receive
|
||||||
|
Loading…
Reference in New Issue
Block a user