comparison src/share/vm/runtime/thread.hpp @ 14407:94c202aa2646

Merge
author kvn
date Thu, 01 Aug 2013 17:25:10 -0700
parents 58be756e7595 5e3b6f79d280
children bdd155477289
comparison
equal deleted inserted replaced
14406:c9f0adfb4a8b 14407:94c202aa2646
83 class jvmtiDeferredLocalVariableSet; 83 class jvmtiDeferredLocalVariableSet;
84 84
85 class GCTaskQueue; 85 class GCTaskQueue;
86 class ThreadClosure; 86 class ThreadClosure;
87 class IdealGraphPrinter; 87 class IdealGraphPrinter;
88
89 DEBUG_ONLY(class ResourceMark;)
88 90
89 class WorkerThread; 91 class WorkerThread;
90 92
91 // Class hierarchy 93 // Class hierarchy
92 // - Thread 94 // - Thread
517 virtual bool is_lock_owned(address adr) const; 519 virtual bool is_lock_owned(address adr) const;
518 520
519 // Check if address is in the stack of the thread (not just for locks). 521 // Check if address is in the stack of the thread (not just for locks).
520 // Warning: the method can only be used on the running thread 522 // Warning: the method can only be used on the running thread
521 bool is_in_stack(address adr) const; 523 bool is_in_stack(address adr) const;
524 // Check if address is in the usable part of the stack (excludes protected
525 // guard pages)
526 bool is_in_usable_stack(address adr) const;
522 527
523 // Sets this thread as starting thread. Returns failure if thread 528 // Sets this thread as starting thread. Returns failure if thread
524 // creation fails due to lack of memory, too many threads etc. 529 // creation fails due to lack of memory, too many threads etc.
525 bool set_as_starting_thread(); 530 bool set_as_starting_thread();
526 531
528 // OS data associated with the thread 533 // OS data associated with the thread
529 OSThread* _osthread; // Platform-specific thread information 534 OSThread* _osthread; // Platform-specific thread information
530 535
531 // Thread local resource area for temporary allocation within the VM 536 // Thread local resource area for temporary allocation within the VM
532 ResourceArea* _resource_area; 537 ResourceArea* _resource_area;
538
539 DEBUG_ONLY(ResourceMark* _current_resource_mark;)
533 540
534 // Thread local handle area for allocation of handles within the VM 541 // Thread local handle area for allocation of handles within the VM
535 HandleArea* _handle_area; 542 HandleArea* _handle_area;
536 GrowableArray<Metadata*>* _metadata_handles; 543 GrowableArray<Metadata*>* _metadata_handles;
537 544
583 bool owns_locks() const { return owned_locks() != NULL; } 590 bool owns_locks() const { return owned_locks() != NULL; }
584 bool owns_locks_but_compiled_lock() const; 591 bool owns_locks_but_compiled_lock() const;
585 592
586 // Deadlock detection 593 // Deadlock detection
587 bool allow_allocation() { return _allow_allocation_count == 0; } 594 bool allow_allocation() { return _allow_allocation_count == 0; }
595 ResourceMark* current_resource_mark() { return _current_resource_mark; }
596 void set_current_resource_mark(ResourceMark* rm) { _current_resource_mark = rm; }
588 #endif 597 #endif
589 598
590 void check_for_valid_safepoint_state(bool potential_vm_operation) PRODUCT_RETURN; 599 void check_for_valid_safepoint_state(bool potential_vm_operation) PRODUCT_RETURN;
591 600
592 private: 601 private:
722 private: 731 private:
723 static WatcherThread* _watcher_thread; 732 static WatcherThread* _watcher_thread;
724 733
725 static bool _startable; 734 static bool _startable;
726 volatile static bool _should_terminate; // updated without holding lock 735 volatile static bool _should_terminate; // updated without holding lock
736
737 os::WatcherThreadCrashProtection* _crash_protection;
727 public: 738 public:
728 enum SomeConstants { 739 enum SomeConstants {
729 delay_interval = 10 // interrupt delay in milliseconds 740 delay_interval = 10 // interrupt delay in milliseconds
730 }; 741 };
731 742
748 static void start(); 759 static void start();
749 static void stop(); 760 static void stop();
750 // Only allow start once the VM is sufficiently initialized 761 // Only allow start once the VM is sufficiently initialized
751 // Otherwise the first task to enroll will trigger the start 762 // Otherwise the first task to enroll will trigger the start
752 static void make_startable(); 763 static void make_startable();
764
765 void set_crash_protection(os::WatcherThreadCrashProtection* crash_protection) {
766 assert(Thread::current()->is_Watcher_thread(), "Can only be set by WatcherThread");
767 _crash_protection = crash_protection;
768 }
769
770 bool has_crash_protection() const { return _crash_protection != NULL; }
771 os::WatcherThreadCrashProtection* crash_protection() const { return _crash_protection; }
753 772
754 private: 773 private:
755 int sleep() const; 774 int sleep() const;
756 }; 775 };
757 776