I met a question about MongoDB's distributed transaction design.

The situation is that:
1. Transaction T2 gets a timestamp S2 from the cluster, due to the clock skew, this timestamp S1 is bigger than S1
2. Before T2 reaches the shard, transaction T1 commits, and gets the timestamp S1
3. Before T2's commitment, T2 reads the conflicting record
4. According to the timestamp semantic, T2 should successfully read T1's data. But according to the transaction semantic, T1 is concurrent with T2, so it could not read T1's data
To my own understanding, the storage engine could solve this problem through blocking the reading transaction who meets uncommitted data and undetermined commit timestamp. For example:

In this case, transaction T2 will be blocked until T1's commitment, due to T1's committing state.
I've read MongoDB's source code, but I could not find any corresponding solution. Could you give me some hint? Thanks!