You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is a not protected reading of non-atomic variables in tx thread which are changing in applier threads. The function applier_read_tx_row() changes applier->lag and applier->last_row_time in applier-thread, and then they are accessed in TX thread without any protection: applier_check_sync() touches applier->lag and lbox_pushapplier() touches applier->last_row_time.
There most likely are more of these misusages.
Given the applier's messy state, it could make sense to split it into 2 structs. One lives entirely in applier-threads, another lives in TX thread. Then the mistakes won't be so easily possible.
The text was updated successfully, but these errors were encountered:
There is a not protected reading of non-atomic variables in tx thread which are changing in applier threads. The function
applier_read_tx_row()
changesapplier->lag
andapplier->last_row_time
in applier-thread, and then they are accessed in TX thread without any protection:applier_check_sync()
touchesapplier->lag
andlbox_pushapplier()
touchesapplier->last_row_time
.There most likely are more of these misusages.
Given the applier's messy state, it could make sense to split it into 2 structs. One lives entirely in applier-threads, another lives in TX thread. Then the mistakes won't be so easily possible.
The text was updated successfully, but these errors were encountered: