LinkedList NullPointerException occurs after switched from IBM JVM 1.4.0 to 1.4.1

T

Tohru Kao

Hi,

I encounter a NullPointerException after I switched from IBM JVM 1.4.0 to
IBM JVM 1.4.1.

The component I use is:

Linux 7.3
IBM JVM 1.4.1
freemarker 1.5.2
tomcat 4.1.18

Please give any advice about this NullPointerException which I didn't
encounter in IBM JVM 1.4.0.

Here is the stack trace:
java.lang.NullPointerException
at java.util.LinkedList$ListItr.next(LinkedList.java:510)
at freemarker.template.expression.ExpressionBuilder.associateOperators(ExpressionBuilder.java)
at freemarker.template.expression.ExpressionBuilder.buildExpression(ExpressionBuilder.java)
at freemarker.template.expression.ExpressionBuilder.build(ExpressionBuilder.java)
at freemarker.template.compiler.StandardTemplateParser.parseExpression(StandardTemplateParser.java)
at freemarker.template.compiler.StandardTemplateParser.parseVariable(StandardTemplateParser.java)
at freemarker.template.compiler.StandardTemplateParser.parseVariableInstruction(StandardTemplateParser.java)
at freemarker.template.compiler.StandardTemplateParser.getNextInstruction(StandardTemplateParser.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildLinks(LinkedListTemplateBuilder.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildGenericBody(LinkedListTemplateBuilder.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildStatement(LinkedListTemplateBuilder.java)
at freemarker.template.instruction.GenericStartInstruction.callBuilder(GenericStartInstruction.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildLinks(LinkedListTemplateBuilder.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildStatement(LinkedListTemplateBuilder.java)
at freemarker.template.instruction.IfInstruction.callBuilder(IfInstruction.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.buildLinks(LinkedListTemplateBuilder.java)
at freemarker.template.compiler.LinkedListTemplateBuilder.build(LinkedListTemplateBuilder.java)
at freemarker.template.Template.compileText(Template.java)
at freemarker.template.Template.compileFromStream(Template.java)
at freemarker.template.Template.compileFromStream(Template.java)
at freemarker.template.Template.compileFromFile(Template.java)
at freemarker.template.Template.(Template.java)
at freemarker.template.FileTemplateCache.loadTemplate(FileTemplateCache.java)
at freemarker.template.FileTemplateCache.getLatestTemplate(FileTemplateCache.java)
at freemarker.template.FileTemplateCache.getTemplate(FileTemplateCache.java)
at org.mytest.HtmlTemplateController.getTemplate(HtmlTemplateController.java:73)
at org.mytest.HtmlTemplateController.getTemplate(HtmlTemplateController.java:99)
at org.mytest.MyServlet.doGet(MyServlet.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:632)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:590)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:707)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
at java.lang.Thread.run(Thread.java:568)


TIA
-Tohru
 
R

Roedy Green

at java.util.LinkedList$ListItr.next(LinkedList.java:510)

possibly one implementation filters out null elements from a
LinkedList and other preserves them??
 
X

xarax

Tohru Kao said:
Hi,

I encounter a NullPointerException after I switched from IBM JVM 1.4.0 to
IBM JVM 1.4.1.

The component I use is:

Linux 7.3
IBM JVM 1.4.1
freemarker 1.5.2
tomcat 4.1.18

Please give any advice about this NullPointerException which I didn't
encounter in IBM JVM 1.4.0.

Here is the stack trace:
java.lang.NullPointerException
at java.util.LinkedList$ListItr.next(LinkedList.java:510)
/snip/

You'll have to look at the source for LinkedList.java near
line 510 to see what it's trying to do. Most likely, it
is advancing to its next pointer and getting a null value.

The list is probably corrupted by a concurrent modification
by another thread. Iteration doesn't guarantee that it will
detect all such modifications. The LinkedList implementation
is not synchronized.

Thus, I suspect that the application that is using the
LinkedList is broken, rather than the LinkedList implementation.
 
N

Neil Masson

xarax said:
/snip/

You'll have to look at the source for LinkedList.java near
line 510 to see what it's trying to do. Most likely, it
is advancing to its next pointer and getting a null value.

The list is probably corrupted by a concurrent modification
by another thread. Iteration doesn't guarantee that it will
detect all such modifications. The LinkedList implementation
is not synchronized.

Thus, I suspect that the application that is using the
LinkedList is broken, rather than the LinkedList implementation.

This analysis is spot on. What has changed in 1.4.1 is that the
next and prev pointers of a removed list element are set to null.
So perhaps one thread is removing an object from a list, while
another is iterating through the list. You might have got away
with this before, but now a NullPointerException will be thrown.

Neil
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top