known synchronized() failures?
Bryce McKinlay
mckinlay@redhat.com
Wed Apr 27 21:46:00 GMT 2005
Martin Egholm Nielsen wrote:
>> There is a known bug in the synchronization implementation prior to
>> GCC 4.0 - see PR 16662. Unfortunately that fix doesn't seem to have
>> made it into the 3.4 branch.
>> However, the symptoms of that problem are an
>> IllegalMonitorStateException - I'm not aware of any bugs that would
>> cause the symptoms you describe.
>> Interesting thread, as I use 3.4.3 and would want to make it "better".
> So, actually I should grab the natObject.cc from CVS (or 1.31 at
> least), and then sync'ing should be at least as good as before.
That should work, I think. I can't recall any other changes to natObject
that would make it incompatible, but its possible you may have to hack
it slightly.
> I haven't seen any IllegalMonitorStateException yet, though, but I
> surely don't wanna have them comming when my application is out and
> running in the field.
Yes, although note that we only ever saw 16662 on MP systems - it
shouldn't be a problem on a uniprocessor machine.
> However, I stumbled across one note Hans made in this patch:
>> http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libjava/java/lang/natObject.cc.diff?cvsroot=gcc&r1=1.30&r2=1.31
>>> + // FIXME: Does this make sense on a uniprocessor, where
> + // it actually yields? It's probably cheaper to convert.
>> I worry about the question about "making sense on a uniprocessor" -
> since this is where I'm targeted...
Hans is referring to whether there is any performance advantage to
spinning on lock aquisition on a uniprocessor machine - spinning only
really makes sense when the lock may be held by a thread running on
another CPU. It should not be a correctness issue, however.
Regards
Bryce
More information about the Java
mailing list