BrowserWorkerRunner: port finalizer throws when the worker global has no close() (Bun)
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- bun, typescript
- Ambito
- web-dev
Direzione di ricerca
Inizia da BrowserWorkerRunner.make e ispeziona il finalizzatore della porta, in particolare il modo in cui gestisce il global del worker usato come porta. Esegui i test pertinenti di Bun worker o una suite bun test che eserciti il codice di browser worker, e conferma che l’arresto non generi più un’eccezione quando al global del worker manca close().
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
BrowserWorkerRunner.make registers a finalizer for each port that calls port.close() unconditionally:
Effect.sync(() => {
port.removeEventListener("message", onMsg)
port.removeEventListener("messageerror", onMessageError)
port.close()
})
In a dedicated worker, layer passes the worker global as the port. Bun's worker global implements postMessage and addEventListener/removeEventListener, but has no close() (Bun 1.4.2):
// worker.ts, run with `new Worker(new URL("./worker.ts", import.meta.url))` under Bun
postMessage({ hasClose: "close" in self, type: typeof (self as any).close })
// => { hasClose: false, type: "undefined" }
So when the runner shuts down in a Bun worker (for example in a bun test suite that exercises browser worker code), the finalizer throws TypeError: port.close is not a function.
The owning parent terminates the worker anyway, so skipping close() when it is missing is safe. #6680 already fixed the messageerror listener removal in the same finalizer; this is the remaining part.
Environment: @effect/[email protected], Bun 1.4.2, Windows x64. Still present on main.
- Lingua principale
- TypeScript
- Stelle
- 16.7k
- Fork
- 808
- Merge medio
- 8h 41m
- PR unite (30g)
- 711
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Effect-TS/effect
-
Support {self: this} for fnUntracedForse di nuovo libera @ArjunCodess l’ha presa 29 giorni fa e non c’è nessuna pull request aperta. Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Effect-TS/effect#8101 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Effect.callback keeps state from finished suspensions alive until the next full GCForse già presa @effect-bot l’ha presa oggi. Aperta
Effect-TS/effect#9497 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Replay-enabled PubSub keeps every published value alive until the next full GCForse già presa @effect-bot l’ha presa oggi. Aperta
Effect-TS/effect#9496 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Socket.readerString corrupts UTF-8 characters split across TCP chunksForse già presa @jayhemnani9910 l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
cluster: `SqlMessageStorage` corrupts request ids above 2^53 on `@effect/sql-sqlite-do`Forse già presa @itisrmk l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Effect-TS/effect
Issue simili
-
freshness freshness:observed-only
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
thoroc/context-radar#280 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
documentation story
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
Billing: computeBundleEconomicsFrom treats a NULL component cost as 0, inflating bundle marginApertabug category:billing priority:p3 track:fast
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
LanternOps/breeze#9223 ·
I maintainer di solito rispondono entro 1 giorno