You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall (JIRA)" <ji...@apache.org> on 2013/02/28 15:49:12 UTC

[jira] [Commented] (FELIX-3907) NullPointerException in BundleWiringImpl when m_disposed is true.

    [ https://issues.apache.org/jira/browse/FELIX-3907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13589575#comment-13589575 ] 

Richard S. Hall commented on FELIX-3907:
----------------------------------------

Yes, I think this is essentially a race condition, but I think it is a valid race condition. We really don't hold any locks while class loading, so it is possible for threads to be trying to class load while other threads are performing lifecycle operations on the bundle. If someone refreshed your bundle while you were trying to load a class from it, this could cause it to be disposed, which means it no longer has a class loader. While the NPE isn't pretty in this case, the only other thing we could do here is check for null and throw a different exception (e.g., CNFE).
                
> NullPointerException in BundleWiringImpl when m_disposed is true.
> -----------------------------------------------------------------
>
>                 Key: FELIX-3907
>                 URL: https://issues.apache.org/jira/browse/FELIX-3907
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.2.0
>         Environment: Windows
>            Reporter: Jad Naous
>
> NullPointerException caused by lines 1472-1474 of {{org.apache.felix.framework.BundleWiringImpl}} when {{this.m_disposed == true}}. I don't know why {{this.m_disposed}} is true, but I'm guessing it's some sort of race condition. Stack trace follows:
> {noformat}
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer java.lang.NullPointerException: null
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1472) ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1923) ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.lang.Class.privateGetDeclaredFields(Class.java:2291) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.lang.Class.getDeclaredField(Class.java:1880) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.events.RuntimeRecording.getClassId(RuntimeRecording.java:156) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.events.RuntimeRecording.writeAsJson(RuntimeRecording.java:118) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.client.ControllerClient.processRequest(ControllerClient.java:160) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.client.ControllerClient.putData(ControllerClient.java:131) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.client.ControllerManager.putData(ControllerManager.java:177) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at com.nerati.agent.client.ControllerSendTask.run(ControllerSendTask.java:119) ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at java.lang.Thread.run(Thread.java:662) [na:1.6.0_37]
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira