Race Condition: Incorrect AbortController Status Check During Tab Visibility Changes
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript
- Área
- frontend
Línea de trabajo
Comienza buscando en el código fuente TypeScript curRequestController y el manejo de visibilidad de openWhenHidden. Sigue el callback de error de la solicitud y verifica que conserva el controlador que inició esa solicitud; reproduce un cambio rápido entre pestañas y confirma que la solicitud abortada no desencadena un reintento innecesario.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Title: Race Condition: Incorrect AbortController Status Check During Tab Visibility Changes
Description
Bug Report
When rapidly switching browser tabs with openWhenHidden: false, the error handling logic incorrectly checks the abort status of a new request instead of the aborted one, leading to unnecessary retries.
Steps to Reproduce
- Create an EventSource connection with
openWhenHidden: false - Quickly switch to another tab and back
- Observe the network requests in DevTools
Current Behavior
- Initial request (A) starts with AbortController instance A
- Tab becomes hidden -> Controller A's abort() is called
- Tab becomes visible -> New request (B) starts with Controller B
- Request A's error handler executes but checks Controller B's status
- Since Controller B is not aborted, it triggers unnecessary retry
Expected Behavior
The error handler should check the abort status of the controller that initiated the request, not the current global controller instance.
Technical Details
The issue occurs because:
curRequestControlleris shared across async contexts- Error handling happens asynchronously after the controller reference has changed
- This leads to checking the wrong controller's abort status
Impact
- Unnecessary network requests
- Incorrect error handling
- Potential performance issues with rapid tab switching
Environment
- Browser: All major browsers
- Package Version: v2.0.1 (Latest version)
- OS: All platforms
Suggested Fix
Store the AbortController instance in function scope to ensure error handling uses the correct instance for status checking.
Pull Request
- Lenguaje dominante
- TypeScript
- Estrellas
- 2.9k
- Forks
- 197
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Azure/fetch-event-source
-
Dificultad 3/5 1-2 días Aptitud para principiantes 28/100
Azure/fetch-event-source#102 ·
-
how to stop retry when onerror?Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
Azure/fetch-event-source#101 · 3 comentarios ·
-
When aborting the event source using abort controller, no callbacks (onError / onClose) are firedAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
Azure/fetch-event-source#100 · 1 comentario · 5 reacciones ·
-
Weird Vite chunk map sourcesAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Azure/fetch-event-source#99 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
Azure/fetch-event-source#98 · 9 reacciones ·
Todos los issues de Azure/fetch-event-source
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
braintrustdata/braintrust-sdk-javascript#2659 ·
Los mantenedores suelen responder en 1 día
-
body-parser 2.3.0 in the published ai-dial-chat-bff image is vulnerable (CVE-2026-111181, HIGH)Posiblemente ocupada @illya-havsiyevych la tomó hoy. Abiertobug
Dificultad 1/5 1-3 horas Aptitud para principiantes 87/100
epam/ai-dial-chat#9566 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
はさみアイコンを修正するAbiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
-
resource.reload() while params is in error switches the resource to 'idle' instead of retryingAbiertoarea: core
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día