From ea7e06fe2760acfb716cac2669453ad1c1d18449 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 26 Apr 2019 05:41:35 -0700 Subject: [PATCH] modules/client/rooms/state: Optimize parallel closure invariant. --- modules/client/sync/rooms/state.cc | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/modules/client/sync/rooms/state.cc b/modules/client/sync/rooms/state.cc index 2762d4622..8ba808d21 100644 --- a/modules/client/sync/rooms/state.cc +++ b/modules/client/sync/rooms/state.cc @@ -192,18 +192,19 @@ ircd::m::sync::room_state_polylog_events(data &data) *data.out, "events" }; - bool ret{false}; ctx::mutex mutex; - const event::closure_idx each_idx{[&data, &array, &mutex, &ret] + std::array md; //TODO: conf + std::vector event(md.size() * 2); + for(auto &fetch : event) + fetch = event::fetch{_default_fopts}; + + size_t _i(0); + bool ret{false}; + const event::closure_idx each_idx{[&data, &array, &mutex, &ret, &event, &_i] (const m::event::idx event_idx) { - const event::fetch event - { - event_idx, std::nothrow, _default_fopts - }; - - //assert(event.valid); - if(unlikely(!event.valid)) + const size_t i{_i++ % event.size()}; + if(unlikely(!seek(event.at(i), event_idx, std::nothrow))) { assert(data.room); log::error @@ -217,12 +218,10 @@ ircd::m::sync::room_state_polylog_events(data &data) } const std::lock_guard lock{mutex}; - room_state_append(data, array, event, event_idx); + room_state_append(data, array, event.at(i), event_idx); ret = true; }}; - //TODO: conf - std::array md; ctx::parallel parallel { m::sync::pool, md, each_idx