From 16e315626026d836cf6aef099941cec171c08e88 Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Sat, 21 Nov 2020 19:59:07 +0000 Subject: [PATCH] requestpool: fix initial sync logic error in appendAccountData() In initial sync, req.since is no longer nil, but instead, req.since.PDUPosition() and req.since.EDUPosition() returns 0. This ensures forgotten rooms do not come back as zombies. --- syncapi/sync/requestpool.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syncapi/sync/requestpool.go b/syncapi/sync/requestpool.go index 61f8c46f7..c75787000 100644 --- a/syncapi/sync/requestpool.go +++ b/syncapi/sync/requestpool.go @@ -328,7 +328,9 @@ func (rp *RequestPool) appendAccountData( // data keys were set between two message. This isn't a huge issue since the // duplicate data doesn't represent a huge quantity of data, but an optimisation // here would be making sure each data is sent only once to the client. - if req.since == nil { + // TODO: We used to have req.since == nil here, is there any case where req.since + // can actually be nil? + if req.since.PDUPosition() == 0 && req.since.EDUPosition() == 0 { // If this is the initial sync, we don't need to check if a data has // already been sent. Instead, we send the whole batch. dataReq := &userapi.QueryAccountDataRequest{