< prev index next >
src/hotspot/share/runtime/serviceThread.cpp
Print this page
rev 51795 : imported patch fix
@@ -84,11 +84,10 @@
while (true) {
bool sensors_changed = false;
bool has_jvmti_events = false;
bool has_gc_notification_event = false;
bool has_dcmd_notification_event = false;
- bool acs_notify = false;
bool stringtable_work = false;
bool symboltable_work = false;
bool resolved_method_table_work = false;
bool protection_domain_table_work = false;
JvmtiDeferredEvent jvmti_event;
@@ -102,20 +101,21 @@
// external suspension.
ThreadBlockInVM tbivm(jt);
MutexLockerEx ml(Service_lock, Mutex::_no_safepoint_check_flag);
- while (!(sensors_changed = LowMemoryDetector::has_pending_requests()) &&
- !(has_jvmti_events = JvmtiDeferredEventQueue::has_events()) &&
- !(has_gc_notification_event = GCNotifier::has_event()) &&
- !(has_dcmd_notification_event = DCmdFactory::has_pending_jmx_notification()) &&
- !(stringtable_work = StringTable::has_work()) &&
- !(symboltable_work = SymbolTable::has_work()) &&
- !(resolved_method_table_work = ResolvedMethodTable::has_work()) &&
- !(protection_domain_table_work = SystemDictionary::pd_cache_table()->has_work())) {
- // wait until one of the sensors has pending requests, or there is a
- // pending JVMTI event or JMX GC notification to post
+ // Use arithmetic-or to combine results; we don't want short-circuiting.
+ while (((sensors_changed = LowMemoryDetector::has_pending_requests()) |
+ (has_jvmti_events = JvmtiDeferredEventQueue::has_events()) |
+ (has_gc_notification_event = GCNotifier::has_event()) |
+ (has_dcmd_notification_event = DCmdFactory::has_pending_jmx_notification()) |
+ (stringtable_work = StringTable::has_work()) |
+ (symboltable_work = SymbolTable::has_work()) |
+ (resolved_method_table_work = ResolvedMethodTable::has_work()) |
+ (protection_domain_table_work = SystemDictionary::pd_cache_table()->has_work()))
+ == 0) {
+ // Wait until notified that there is some work to do.
Service_lock->wait(Mutex::_no_safepoint_check_flag);
}
if (has_jvmti_events) {
jvmti_event = JvmtiDeferredEventQueue::dequeue();
< prev index next >