Request for review (S) 7012088: jump to 0 address because of lack of memory ordering in SignatureHandler::add
Coleen Phillimore
coleen.phillimore at oracle.com
Tue Feb 1 16:49:48 PST 2011
On 2/1/2011 7:41 PM, David Holmes wrote:
> Coleen Phillimore said the following on 02/02/11 05:48:
>> On 2/1/2011 2:42 PM, Dmitry Samersoff wrote:
>>> Coleen,
>>>
>>> Should we NULL-check _handlers in the code also, before accessing it?
>> No, because we create and initialize it just before the code. If
>> 'new' comes back as null, it'll vm_exit_out_of_memory().
>>
>> see: http://cr.openjdk.java.net/~coleenp/7012088_2/
>
> Here:
>
> 1195 #ifdef ASSERT
> 1196 int handler_index = 0;
> 1197 int fingerprint_index = 0;
> 1198 {
> 1199 // '_handlers' and '_fingerprints' are 'GrowableArray's and
> are NOT synchronized
> 1200 // in any way if accessed from multiple threads. To avoid
> races with another
> 1201 // thread which may change the arrays in the above, mutex
> protected block, we
> 1202 // have to protect this read access here with the same mutex
> as well!
> 1203 MutexLocker mu(SignatureHandlerLibrary_lock);
> 1204 if (_handlers != NULL) {
> 1205 handler_index = _handlers->find(method->signature_handler());
> 1206 fingerprint_index =
> _fingerprints->find(Fingerprinter(method).fingerprint());
> 1207 }
> 1208 }
> 1209 assert(method->signature_handler() ==
> Interpreter::slow_signature_handler() ||
> 1210 handler_index == fingerprint_index, "sanity check");
> 1211 #endif // ASSERT
>
> should we set handler_index and fingerprint_index to different initial
> values (-1 and -2 ?) so that the assert doesn't accidentally pass? I
> assume that if _handlers is null then we should have invalid indices
> but the first clause of the assert should pass.
Yeah, that makes sense.
Thanks,
Coleen
>
> David
>
>> Thanks,
>> Coleen
>>>
>>> -Dmitry
>>>
>>>
>>> On 2011-02-01 21:20, Coleen Phillimore wrote:
>>>>
>>>> Dmitry, You are absolutely right. We should check _handlers
>>>> under the
>>>> lock too. It could be created in a separate thread.
>>>>
>>>> Thanks!
>>>> Coleen
>>>>
>>>> On 2/1/2011 1:14 PM, Dmitry Samersoff wrote:
>>>>> Coleen,
>>>>>
>>>>> assert code is not clean for me:
>>>>>
>>>>> if (_handlers != NULL){
>>>>> }
>>>>>
>>>>> _handlers never checked for NULL before e.g. during printing we
>>>>> use _handlers->length() etc.
>>>>>
>>>>> if we are fighting against race I guess we should take a lock before
>>>>> null check.
>>>>>
>>>>> i.e.
>>>>>
>>>>> MutexLocker mu(SignatureHandlerLibrary_lock);
>>>>> if (_handlers != NULL) {
>>>>> ....
>>>>>
>>>>> -Dmitry
>>>>>
>>>>>
>>>>> On 2011-02-01 19:48, Coleen Phillimore wrote:
>>>>>> Summary: Write method signature handler under lock to prevent
>>>>>> race with
>>>>>> growable array resizing
>>>>>>
>>>>>> Also includes a fix to 6704010 which was broken with
>>>>>> -XX:-UseFastSignatureHandlers
>>>>>>
>>>>>> This change was submitted and tested by the customer.
>>>>>>
>>>>>> open webrev at http://cr.openjdk.java.net/~coleenp/7012088/
>>>>>> bug link at http://bugs.sun.com/view_bug.do?bug_id=7012088
>>>>>>
>>>>>> Thanks,
>>>>>> Coleen
>>>>>
>>>>
>>>
>>>
>>
More information about the hotspot-runtime-dev
mailing list