equal
deleted
inserted
replaced
78 if (!supers_exist) { |
78 if (!supers_exist) { |
79 // Oops. Not allocated yet. Back out, allocate it, and retry. |
79 // Oops. Not allocated yet. Back out, allocate it, and retry. |
80 Klass* ek = NULL; |
80 Klass* ek = NULL; |
81 { |
81 { |
82 MutexUnlocker mu(MultiArray_lock); |
82 MutexUnlocker mu(MultiArray_lock); |
83 MutexUnlocker mc(Compile_lock); // for vtables |
|
84 super_klass = element_super->array_klass(CHECK_0); |
83 super_klass = element_super->array_klass(CHECK_0); |
85 for( int i = element_supers->length()-1; i >= 0; i-- ) { |
84 for( int i = element_supers->length()-1; i >= 0; i-- ) { |
86 Klass* elem_super = element_supers->at(i); |
85 Klass* elem_super = element_supers->at(i); |
87 elem_super->array_klass(CHECK_0); |
86 elem_super->array_klass(CHECK_0); |
88 } |
87 } |
330 if (or_null) return NULL; |
329 if (or_null) return NULL; |
331 |
330 |
332 ResourceMark rm; |
331 ResourceMark rm; |
333 JavaThread *jt = (JavaThread *)THREAD; |
332 JavaThread *jt = (JavaThread *)THREAD; |
334 { |
333 { |
335 MutexLocker mc(Compile_lock, THREAD); // for vtables |
|
336 // Ensure atomic creation of higher dimensions |
334 // Ensure atomic creation of higher dimensions |
337 MutexLocker mu(MultiArray_lock, THREAD); |
335 MutexLocker mu(MultiArray_lock, THREAD); |
338 |
336 |
339 // Check if another thread beat us |
337 // Check if another thread beat us |
340 if (higher_dimension() == NULL) { |
338 if (higher_dimension() == NULL) { |