commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Torsten Curdt (JIRA)" <>
Subject [jira] [Commented] (BCEL-267) Race conditions on static fields in BranchHandle and InstructionHandle
Date Mon, 11 Dec 2017 22:59:00 GMT


Torsten Curdt commented on BCEL-267:

[] There is a difference between accessing the same instance or different
instances from multiple threads. It has always been (how do I say this politely?) "not exactly
a good design decision" to use statics like this - at all. So I think [~sherrmann] has a valid
point here.

Making BCEL instances thread-safe will probably never happen (and should not be the goal),
but it should be possible to use different BCEL instances from different threads. But I agree
- this might not be the last place to fix this. Of course it is a project decision to support
this. (This pain is one of the reasons I moved away from BCEL at javaflow times).

> Race conditions on static fields in BranchHandle and InstructionHandle
> ----------------------------------------------------------------------
>                 Key: BCEL-267
>                 URL:
>             Project: Commons BCEL
>          Issue Type: Bug
>          Components: Main
>    Affects Versions: 5.2
>            Reporter: Stephan Herrmann
>         Attachments: BCEL267--Race-conditions-on-static-fields-in-BranchH.patch
> I have observed race conditions causing NullPointerException like this
> {code}java.lang.NullPointerException
>         at org.apache.bcel.generic.InstructionList.getInstructionHandles(
>         at org.apache.bcel.generic.InstructionList.findHandle(
>         at org.apache.bcel.generic.MethodGen.<init>(
> {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:
> The modified classes (based on 5.2) can be found here:
> -

This message was sent by Atlassian JIRA

View raw message