From ea1827bc42e6adda866c94d04e3cdde3c32791a1 Mon Sep 17 00:00:00 2001 From: Hans Svensson Date: Fri, 8 May 2020 08:31:43 +0200 Subject: [PATCH] Don't crash in send_push if user is not in room This hits us in load testing, should be very rare in practice. --- apps/roster/src/protocol/roster_message.erl | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/roster/src/protocol/roster_message.erl b/apps/roster/src/protocol/roster_message.erl index bea3695a6..0469b1a96 100644 --- a/apps/roster/src/protocol/roster_message.erl +++ b/apps/roster/src/protocol/roster_message.erl @@ -514,10 +514,19 @@ notify(From, To, Msg, Action) -> #'Member'{alias = FromAlias} = roster:muc_member(From, RoomId), {ok, #'Room'{name = RoomName, type = RoomType}} = kvs:get('Room', RoomId), RoomMsgPreview = iolist_to_binary([RoomName, <<": ">>, MsgPreview]), - {lists:filter(fun({ReceiverPhoneId, _}) -> ReceiverPhoneId /= From end, - lists:flatten([{ToMemPhoneId, (roster:room(roster:roster_id(ToMemPhoneId), RoomId))#'Room'{last_msg = Msg}} - || #'Member'{phone_id = ToMemPhoneId} <- roster:members(#muc{name = To}, active)])), - case RoomType of channel -> RoomMsgPreview; _ -> iolist_to_binary([FromAlias, <<"@">>, RoomMsgPreview]) end}; + PushAlertMsg = case RoomType of + channel -> RoomMsgPreview; + _ -> iolist_to_binary([FromAlias, <<"@">>, RoomMsgPreview]) + end, + {lists:foldl( + fun(#'Member'{ phone_id = ToPId }, Acc) when ToPId /= From -> + case roster:room(roster:roster_id(ToPId), RoomId) of + R = #'Room'{} -> [{ToPId, R#'Room'{last_msg = Msg}} | Acc]; + _ -> Acc + end; + (_, Acc) -> Acc + end, [], roster:members(#muc{name = To}, active)), + PushAlertMsg}; _ -> #'Contact'{names = FromName} = Contact = roster:user(roster:roster_id(To), From), {[{To, Contact#'Contact'{last_msg = Msg}}], iolist_to_binary([FromName, ": ", MsgPreview])} -- GitLab