aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ejabberd_piefxis.erl25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/ejabberd_piefxis.erl b/src/ejabberd_piefxis.erl
index e4c74177c..737ed502f 100644
--- a/src/ejabberd_piefxis.erl
+++ b/src/ejabberd_piefxis.erl
@@ -296,17 +296,26 @@ process(#state{xml_stream_state = XMLStreamState, fd = Fd} = State) ->
end.
process_els(State) ->
+ Els = gather_els(State, []),
+ process_els(State, lists:reverse(Els)).
+
+gather_els(State, List) ->
receive
{'$gen_event', El} ->
- case process_el(El, State) of
- {ok, NewState} ->
- process_els(NewState);
- Err ->
- Err
- end
+ gather_els(State, [El | List])
after 0 ->
- {ok, State}
- end.
+ List
+end.
+
+process_els(State, [El | Tail]) ->
+ case process_el(El, State) of
+ {ok, NewState} ->
+ process_els(NewState, Tail);
+ Err ->
+ Err
+ end;
+process_els(State, []) ->
+ {ok, State}.
process_el({xmlstreamstart, <<"server-data">>, Attrs}, State) ->
case fxml:get_attr_s(<<"xmlns">>, Attrs) of