Mercurial > hg > graal-jvmci-8
comparison src/share/vm/oops/instanceKlass.cpp @ 20383:14b8221771dc
Merge
author | tschatzl |
---|---|
date | Wed, 03 Sep 2014 09:25:44 +0200 |
parents | a8ea2f110d87 6e0cb14ce59b |
children | 7dca5ed0e13d |
comparison
equal
deleted
inserted
replaced
20382:b1266b08b994 | 20383:14b8221771dc |
---|---|
2319 | 2319 |
2320 // do array classes also. | 2320 // do array classes also. |
2321 array_klasses_do(remove_unshareable_in_class); | 2321 array_klasses_do(remove_unshareable_in_class); |
2322 } | 2322 } |
2323 | 2323 |
2324 void restore_unshareable_in_class(Klass* k, TRAPS) { | 2324 static void restore_unshareable_in_class(Klass* k, TRAPS) { |
2325 k->restore_unshareable_info(CHECK); | 2325 // Array classes have null protection domain. |
2326 } | 2326 // --> see ArrayKlass::complete_create_array_klass() |
2327 | 2327 k->restore_unshareable_info(ClassLoaderData::the_null_class_loader_data(), Handle(), CHECK); |
2328 void InstanceKlass::restore_unshareable_info(TRAPS) { | 2328 } |
2329 Klass::restore_unshareable_info(CHECK); | 2329 |
2330 void InstanceKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { | |
2331 Klass::restore_unshareable_info(loader_data, protection_domain, CHECK); | |
2330 instanceKlassHandle ik(THREAD, this); | 2332 instanceKlassHandle ik(THREAD, this); |
2331 | 2333 |
2332 Array<Method*>* methods = ik->methods(); | 2334 Array<Method*>* methods = ik->methods(); |
2333 int num_methods = methods->length(); | 2335 int num_methods = methods->length(); |
2334 for (int index2 = 0; index2 < num_methods; ++index2) { | 2336 for (int index2 = 0; index2 < num_methods; ++index2) { |
2348 | 2350 |
2349 // restore constant pool resolved references | 2351 // restore constant pool resolved references |
2350 ik->constants()->restore_unshareable_info(CHECK); | 2352 ik->constants()->restore_unshareable_info(CHECK); |
2351 | 2353 |
2352 ik->array_klasses_do(restore_unshareable_in_class, CHECK); | 2354 ik->array_klasses_do(restore_unshareable_in_class, CHECK); |
2355 } | |
2356 | |
2357 // returns true IFF is_in_error_state() has been changed as a result of this call. | |
2358 bool InstanceKlass::check_sharing_error_state() { | |
2359 assert(DumpSharedSpaces, "should only be called during dumping"); | |
2360 bool old_state = is_in_error_state(); | |
2361 | |
2362 if (!is_in_error_state()) { | |
2363 bool bad = false; | |
2364 for (InstanceKlass* sup = java_super(); sup; sup = sup->java_super()) { | |
2365 if (sup->is_in_error_state()) { | |
2366 bad = true; | |
2367 break; | |
2368 } | |
2369 } | |
2370 if (!bad) { | |
2371 Array<Klass*>* interfaces = transitive_interfaces(); | |
2372 for (int i = 0; i < interfaces->length(); i++) { | |
2373 Klass* iface = interfaces->at(i); | |
2374 if (InstanceKlass::cast(iface)->is_in_error_state()) { | |
2375 bad = true; | |
2376 break; | |
2377 } | |
2378 } | |
2379 } | |
2380 | |
2381 if (bad) { | |
2382 set_in_error_state(); | |
2383 } | |
2384 } | |
2385 | |
2386 return (old_state != is_in_error_state()); | |
2353 } | 2387 } |
2354 | 2388 |
2355 static void clear_all_breakpoints(Method* m) { | 2389 static void clear_all_breakpoints(Method* m) { |
2356 m->clear_all_breakpoints(); | 2390 m->clear_all_breakpoints(); |
2357 } | 2391 } |