Possible infinite loop in js execution?
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 38/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- java, javascript
- Área
- backend, testing-qa
Línea de trabajo
Start with the reported stack trace, especially EmbeddedSlotMap.query in SlotMapContainer and the JavaScript execution paths shown. Investigate whether the slot chain can cycle and find a way to reproduce or test the suspected infinite loop; done means identifying the cause and confirming a fix prevents the hang. The reporter says reproduction is difficult, and the issue has had no recent response.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I'm using htmlunit 4.6 to open a web page. Occasionally it gets hanging up fore ever although I have already set timeout for network and js execution. I got the stack trace of the process and it looks is in an infinite loop based on the phenomenons:
- The hanging thread is runnable
- The stack trace doesn't change between times
- The process consumes much CPU.
There are 2 threads in the process hanging on the same spot of js execution. One is main thread at WebClient.getPage(). Another is "JS executor" from background jobs thread:
Thread 1:
"main" #1 prio=5 os_prio=0 cpu=22206697.68ms elapsed=22389.78s tid=0x00007f5170019f00 nid=0x2d6762 runnable [0x00007f5174d00000]
java.lang.Thread.State: RUNNABLE
at org.htmlunit.corejs.javascript.EmbeddedSlotMap.query(EmbeddedSlotMap.java:82)
at org.htmlunit.corejs.javascript.SlotMapContainer.query(SlotMapContainer.java:67)
at org.htmlunit.corejs.javascript.ScriptableObject.isGetterOrSetter(ScriptableObject.java:656)
at org.htmlunit.corejs.javascript.NativeArray.has(NativeArray.java:603)
at org.htmlunit.corejs.javascript.ScriptableObject.getBase(ScriptableObject.java:2510)
at org.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2362)
at org.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1857)
at org.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1846)
at org.htmlunit.corejs.javascript.Interpreter.doSetElem(Interpreter.java:3004)
at org.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1692)
at org.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:1139)
at org.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:91)
at org.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:395)
at org.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:300)
at org.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:4278)
at org.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:104)
at org.htmlunit.javascript.JavaScriptEngine$2.doRun(JavaScriptEngine.java:784)
at org.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:890)
...
Thread 2:
"JS executor for org.htmlunit.WebClient@289254fe" #150 daemon prio=5 os_prio=0 cpu=22129222.51ms elapsed=22162.97s tid=0x00007f5171b45550 nid=0x2d68da runnable [0x00007f50d2dfb000]
java.lang.Thread.State: RUNNABLE
at org.htmlunit.corejs.javascript.EmbeddedSlotMap.query(EmbeddedSlotMap.java:82)
at org.htmlunit.corejs.javascript.SlotMapContainer.query(SlotMapContainer.java:67)
at org.htmlunit.corejs.javascript.ScriptableObject.isGetterOrSetter(ScriptableObject.java:656)
at org.htmlunit.corejs.javascript.NativeArray.has(NativeArray.java:603)
at org.htmlunit.corejs.javascript.ScriptableObject.getBase(ScriptableObject.java:2510)
at org.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2362)
at org.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1857)
at org.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1846)
at org.htmlunit.corejs.javascript.Interpreter.doSetElem(Interpreter.java:3004)
at org.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1692)
at org.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:1139)
at org.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:91)
at org.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:395)
at org.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:300)
at org.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:4278)
at org.htmlunit.corejs.javascript.NativePromise$Reaction.callReactionFunction(NativePromise.java:669)
at org.htmlunit.corejs.javascript.NativePromise$Reaction.invoke(NativePromise.java:656)
at org.htmlunit.corejs.javascript.NativePromise.lambda$fulfillPromise$8(NativePromise.java:473)
at org.htmlunit.corejs.javascript.NativePromise$$Lambda$417/0x00007f50d4716420.run(Unknown Source)
at org.htmlunit.corejs.javascript.Context.processMicrotasks(Context.java:2420)
at org.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:893)
at org.htmlunit.corejs.javascript.Context.call(Context.java:590)
at org.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:487)
at org.htmlunit.javascript.HtmlUnitContextFactory.callSecured(HtmlUnitContextFactory.java:314)
at org.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:846)
at org.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:814)
at org.htmlunit.html.HtmlPage.executeJavaScriptFunction(HtmlPage.java:2568)
at org.htmlunit.html.HtmlPage.executeJavaScriptFunction(HtmlPage.java:2561)
at org.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:56)
at org.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:95)
at org.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:451)
at org.htmlunit.javascript.background.DefaultJavaScriptExecutor.run(DefaultJavaScriptExecutor.java:154)
at java.lang.Thread.run([email protected]/Thread.java:840)
It's hard to reproduce so I'm not able to get the js causing this for now. I checked the code of the loop method is like this:
public Slot query(Object key, int index) {
if (slots == null) {
return null;
}
int indexOrHash = (key != null ? key.hashCode() : index);
int slotIndex = getSlotIndex(slots.length, indexOrHash);
for (Slot slot = slots[slotIndex]; slot != null; slot = slot.next) {
if (indexOrHash == slot.indexOrHash && Objects.equals(slot.name, key)) {
return slot;
}
}
return null;
}
I'm wondering is it possible that in some casese the slot.next could point to a previous slot in the slots array and causes this infinite loop?
- Lenguaje dominante
- JavaScript
- Estrellas
- 952
- Forks
- 183
- Merge medio
- 2 d 1 h
- PR fusionados (30 d)
- 1
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 HtmlUnit/htmlunit
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Todos los issues de HtmlUnit/htmlunit
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
feimacode/open-design-agent-kit#66 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
xojs/eslint-config-xo#134 ·
-
FEATURE REQUEST
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
linuxmint/cinnamon-spices-extensions#1193 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
huggingface/transformers.js#1839 ·
Los mantenedores suelen responder en 1 día