Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions packages/pglite/src/worker/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,18 @@ export class PGliteWorker
// Wait for the worker let us know it's ready
await this.#workerReadyPromise

// Register leader-now listener early to avoid race condition (#850)
// The worker may send 'leader-now' immediately after becoming leader,
// before we've finished setting up broadcast channels. By registering
// this listener before any async operations, we ensure we don't miss
// the message.
this.#workerProcess.addEventListener('message', async (event) => {
if (event.data.type === 'leader-now') {
this.#isLeader = true
this.#eventTarget.dispatchEvent(new Event('leader-change'))
}
})

// Acquire the tab close lock, this is released then the tab, or this
// PGliteWorker instance, is closed
const tabCloseLockId = `pglite-tab-close:${this.#tabId}`
Expand Down Expand Up @@ -180,13 +192,6 @@ export class PGliteWorker
}
})

this.#workerProcess.addEventListener('message', async (event) => {
if (event.data.type === 'leader-now') {
this.#isLeader = true
this.#eventTarget.dispatchEvent(new Event('leader-change'))
}
})

this.#leaderNotifyLoop()

// Init array types
Expand Down