commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephan Herrmann (JIRA)" <>
Subject [jira] [Created] (BCEL-267) Race conditions on static fields in BranchHandle and InstructionHandle
Date Tue, 29 Sep 2015 20:13:04 GMT
Stephan Herrmann created BCEL-267:

             Summary: Race conditions on static fields in BranchHandle and InstructionHandle
                 Key: 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

        at org.apache.bcel.generic.InstructionList.getInstructionHandles(
        at org.apache.bcel.generic.InstructionList.findHandle(
        at org.apache.bcel.generic.MethodGen.<init>(

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:

The modified classes (based on 5.2) can be found here:

This message was sent by Atlassian JIRA

View raw message