construct
construct copied to clipboard
Room rejoin after user profile change is not concurrent or backgrounded.
The room rejoin procedure in m_user_profile.cc runs from the vm.effect hook during a profile update. This usually means execution occurs on the same ircd::ctx as the evaluator of the profile update event, which usually means the client's HTTP request, which is usually limited to ~30 seconds. The ctx interrupt after the timeout can quench the rejoin loop and the profile of a user will be inconsistent between rooms.
This can be fixed by spawning a background ctx to perform the loop, or performing the rejoins concurrently to only incur a single manageable timeout, or some combination thereof.