Race condition in JV_HASH_SYNCHRONIZATION in libgcj??

David Daney ddaney@avtrex.com
Sat Sep 15 01:08:00 GMT 2007


In natObject.cc:877 in _Jv_MonitorEnter (jobject obj) we have the 
following:
.
.
.
 if (__builtin_expect(compare_and_swap(&(he -> address),
					0, addr),true))
 {
 JvAssert(he -> light_thr_id == INVALID_THREAD_ID);
 JvAssert(he -> light_count == 0);
 he -> light_thr_id = self;
 // Count fields are set correctly. Heavy_count was also zero,
 // but can change asynchronously.
 // This path is hopefully both fast and the most common.
 LOG(ACQ_LIGHT, addr, self);
 return;
 }
 address = he -> address;
.
.
.
Where 'he->' is used for several different things.
This looks like a race to me. How can we be using 'he -> ' for 
anything. We just failed to get a lock on it, how can we assert that it 
contains anything useful or consistent across the several uses of it?
David Daney


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /