-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Replication
-
Fully Compatible
-
ALL
-
v8.2, v8.0, v7.0
-
Repl 2026-01-19
-
200
-
None
-
None
-
None
-
None
-
None
-
None
-
None
There's a race on the _participants variable, where it's being set in runCommit() and simultaneously read in reportState(). It's being set without a mutex, but read with a mutex.
Adding _mutex protection to where it's being set should be sufficient in this case.
I don't think there is any risk today of concurrent writers to any variables, because the TransactionCoordinator exposes a limited interface that can be called from the TransactionCoordinatorService, which itself is triggered when a command with a session and transaction number is run. However, since only one command with a particular LSID can be run at a time, there shouldn't be a risk of multiple commands with the same LSID being run concurrently, which means only one thread should be running on the TransactionCoordinator at a time, other than the reportState() case which is an exception.