351 os::set_native_thread_name(name);
352 }
353
354 ObjectMonitor** omInUseList_addr() { return (ObjectMonitor **)&omInUseList; }
355 Monitor* SR_lock() const { return _SR_lock; }
356
357 bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; }
358
359 inline void set_suspend_flag(SuspendFlags f);
360 inline void clear_suspend_flag(SuspendFlags f);
361
362 inline void set_has_async_exception();
363 inline void clear_has_async_exception();
364
365 bool do_critical_native_unlock() const { return (_suspend_flags & _critical_native_unlock) != 0; }
366
367 inline void set_critical_native_unlock();
368 inline void clear_critical_native_unlock();
369
370 // Support for Unhandled Oop detection
371 #ifdef CHECK_UNHANDLED_OOPS
372 private:
373 UnhandledOops* _unhandled_oops;
374 public:
375 UnhandledOops* unhandled_oops() { return _unhandled_oops; }
376 // Mark oop safe for gc. It may be stack allocated but won't move.
377 void allow_unhandled_oop(oop *op) {
378 if (CheckUnhandledOops) unhandled_oops()->allow_unhandled_oop(op);
379 }
380 // Clear oops at safepoint so crashes point to unhandled oop violator
381 void clear_unhandled_oops() {
382 if (CheckUnhandledOops) unhandled_oops()->clear_unhandled_oops();
383 }
384 #endif // CHECK_UNHANDLED_OOPS
385
386 #ifndef PRODUCT
387 bool skip_gcalot() { return _skip_gcalot; }
388 void set_skip_gcalot(bool v) { _skip_gcalot = v; }
389 #endif
390
391 public:
392 // Installs a pending exception to be inserted later
393 static void send_async_exception(oop thread_oop, oop java_throwable);
|
351 os::set_native_thread_name(name);
352 }
353
354 ObjectMonitor** omInUseList_addr() { return (ObjectMonitor **)&omInUseList; }
355 Monitor* SR_lock() const { return _SR_lock; }
356
357 bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; }
358
359 inline void set_suspend_flag(SuspendFlags f);
360 inline void clear_suspend_flag(SuspendFlags f);
361
362 inline void set_has_async_exception();
363 inline void clear_has_async_exception();
364
365 bool do_critical_native_unlock() const { return (_suspend_flags & _critical_native_unlock) != 0; }
366
367 inline void set_critical_native_unlock();
368 inline void clear_critical_native_unlock();
369
370 // Support for Unhandled Oop detection
371 #ifdef ASSERT
372 private:
373 UnhandledOops* _unhandled_oops;
374 #endif
375 #ifdef CHECK_UNHANDLED_OOPS
376 #ifndef ASSERT
377 #error "CHECK_UNHANDLED_OOPS should be defined only in debug VM"
378 #endif
379 public:
380 UnhandledOops* unhandled_oops() { return _unhandled_oops; }
381 // Mark oop safe for gc. It may be stack allocated but won't move.
382 void allow_unhandled_oop(oop *op) {
383 if (CheckUnhandledOops) unhandled_oops()->allow_unhandled_oop(op);
384 }
385 // Clear oops at safepoint so crashes point to unhandled oop violator
386 void clear_unhandled_oops() {
387 if (CheckUnhandledOops) unhandled_oops()->clear_unhandled_oops();
388 }
389 #endif // CHECK_UNHANDLED_OOPS
390
391 #ifndef PRODUCT
392 bool skip_gcalot() { return _skip_gcalot; }
393 void set_skip_gcalot(bool v) { _skip_gcalot = v; }
394 #endif
395
396 public:
397 // Installs a pending exception to be inserted later
398 static void send_async_exception(oop thread_oop, oop java_throwable);
|