[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [jira] [Created] (BCEL-267) Race conditions on static fields in BranchHandle and InstructionHandle
From:       "Stephan Herrmann (JIRA)" <jira () apache ! org>
Date:       2015-09-29 20:13:04
Message-ID: JIRA.12901414.1443557562000.106015.1443557584089 () Atlassian ! JIRA
[Download RAW message or body]

Stephan Herrmann created BCEL-267:
-------------------------------------

             Summary: Race conditions on static fields in BranchHandle and \
InstructionHandle  Key: BCEL-267
                 URL: https://issues.apache.org/jira/browse/BCEL-267
             Project: Commons BCEL
          Issue Type: Bug
          Components: Main
    Affects Versions: 5.2
            Reporter: Stephan Herrmann


I have observed race conditions causing NullPointerException like this

{code}java.lang.NullPointerException
        at org.apache.bcel.generic.InstructionList.getInstructionHandles(InstructionList.java:1021)
                
        at org.apache.bcel.generic.InstructionList.findHandle(InstructionList.java:141)
  at org.apache.bcel.generic.MethodGen.<init>(MethodGen.java:194)
{code}

In the debugger I could verify that concurrent access to the fields \
{{BranchHandle.bh_list}} or {{InstructionHandle.ih_list}} can cause corruption of \
those lists.

I succeeded to make the exception less frequent by adding synchronized blocks, but \
still the exception could be observed. I concluded that for safe protection the \
fields would need to be made volatile, which in the end might actually defeat their \
original purpose of optimization.

I have since then run with a patched version of BCEL, where those static fields were \
simply removed and new Handles were created on every request. This variant finally \
was free of the race condition.

Seeing activity towards a 6.0 release, I'd appreciate if this change could be \
incorporated.

The original bug tracking my experiments can be found in Eclipse bugzilla: \
https://bugs.eclipse.org/344350

The modified classes (based on 5.2) can be found here:
- http://git.eclipse.org/c/objectteams/org.eclipse.objectteams.git/tree/plugins/org.eclipse.objectteams.otre/bcelpatchsrc/org/apache/bcel/generic





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic