diff --git a/modules/client/sync.cc b/modules/client/sync.cc index 219c7a96b..0a302abc2 100644 --- a/modules/client/sync.cc +++ b/modules/client/sync.cc @@ -555,7 +555,8 @@ ircd::m::sync::linear_proffer_event(data &data, bool ircd::m::sync::linear_proffer_event_one(data &data) { - return !m::sync::for_each(string_view{}, [&data] + bool ret{false}; + m::sync::for_each(string_view{}, [&data, &ret] (item &item) { json::stack::checkpoint checkpoint @@ -564,11 +565,14 @@ ircd::m::sync::linear_proffer_event_one(data &data) }; if(item.linear(data)) - return false; + ret = true; + else + checkpoint.rollback(); - checkpoint.rollback(); return true; }); + + return ret; } // diff --git a/modules/client/sync/rooms.cc b/modules/client/sync/rooms.cc index 840788b59..5f0faad39 100644 --- a/modules/client/sync/rooms.cc +++ b/modules/client/sync/rooms.cc @@ -68,7 +68,8 @@ ircd::m::sync::rooms_linear(data &data) if(should_ignore(data)) return false; - return !m::sync::for_each("rooms", [&data] + bool ret{false}; + m::sync::for_each("rooms", [&data, &ret] (item &item) { json::stack::checkpoint checkpoint @@ -77,11 +78,14 @@ ircd::m::sync::rooms_linear(data &data) }; if(item.linear(data)) - return false; + ret = true; + else + checkpoint.rollback(); - checkpoint.rollback(); return true; }); + + return ret; } bool diff --git a/modules/client/sync/rooms/ephemeral.cc b/modules/client/sync/rooms/ephemeral.cc index 48b2e8f61..2e7d7f8a3 100644 --- a/modules/client/sync/rooms/ephemeral.cc +++ b/modules/client/sync/rooms/ephemeral.cc @@ -33,7 +33,8 @@ ircd::m::sync::rooms_ephemeral bool ircd::m::sync::rooms_ephemeral_linear(data &data) { - return !m::sync::for_each("rooms.ephemeral", [&data] + bool ret{false}; + m::sync::for_each("rooms.ephemeral", [&data, &ret] (item &item) { json::stack::checkpoint checkpoint @@ -42,11 +43,14 @@ ircd::m::sync::rooms_ephemeral_linear(data &data) }; if(item.linear(data)) - return false; + ret = true; + else + checkpoint.rollback(); - checkpoint.rollback(); return true; }); + + return ret; } bool