aboutsummaryrefslogtreecommitdiff
path: root/src/test/modules/commit_ts/sql/commit_timestamp.sql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-06-30 14:57:06 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-06-30 14:57:14 -0400
commit1f201a818a5910a37530cc929bd345688f827942 (patch)
tree8aec05ddd9c9ebf8d2815daf9e496cba7403c349 /src/test/modules/commit_ts/sql/commit_timestamp.sql
parent1db49c3b6d2399f8f83a97f1fa34e749b9fada7c (diff)
downloadpostgresql-1f201a818a5910a37530cc929bd345688f827942.tar.gz
postgresql-1f201a818a5910a37530cc929bd345688f827942.zip
Fix race conditions and missed wakeups in syncrep worker signaling.
When a sync worker is waiting for the associated apply worker to notice that it's in SYNCWAIT state, wait_for_worker_state_change() would just patiently wait for that to happen. This generally required waiting for the 1-second timeout in LogicalRepApplyLoop to elapse. Kicking the worker via its latch makes things significantly snappier. While at it, fix race conditions that could potentially result in crashes: we can *not* call logicalrep_worker_wakeup_ptr() once we've released the LogicalRepWorkerLock, because worker->proc might've been reset to NULL after we do that (indeed, there's no really solid reason to believe that the LogicalRepWorker slot even belongs to the same worker anymore). In logicalrep_worker_wakeup(), we can just move the wakeup inside the lock scope. In process_syncing_tables_for_apply(), a bit more code rearrangement is needed. Also improve some nearby comments.
Diffstat (limited to 'src/test/modules/commit_ts/sql/commit_timestamp.sql')
0 files changed, 0 insertions, 0 deletions