comparison src/share/vm/runtime/thread.hpp @ 14422:2b8e28fdf503

Merge
author kvn
date Tue, 05 Nov 2013 17:38:04 -0800
parents bdd155477289 469216acdb28
children 3205e78d8193
comparison
equal deleted inserted replaced
14421:3068270ba476 14422:2b8e28fdf503
111 // int _exception_line; // line information for exception (debugging only) 111 // int _exception_line; // line information for exception (debugging only)
112 protected: 112 protected:
113 // Support for forcing alignment of thread objects for biased locking 113 // Support for forcing alignment of thread objects for biased locking
114 void* _real_malloc_address; 114 void* _real_malloc_address;
115 public: 115 public:
116 void* operator new(size_t size) { return allocate(size, true); } 116 void* operator new(size_t size) throw() { return allocate(size, true); }
117 void* operator new(size_t size, const std::nothrow_t& nothrow_constant) { return allocate(size, false); } 117 void* operator new(size_t size, const std::nothrow_t& nothrow_constant) throw() {
118 return allocate(size, false); }
118 void operator delete(void* p); 119 void operator delete(void* p);
119 120
120 protected: 121 protected:
121 static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread); 122 static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread);
122 private: 123 private:
924 volatile oop _exception_oop; // Exception thrown in compiled code 925 volatile oop _exception_oop; // Exception thrown in compiled code
925 volatile address _exception_pc; // PC where exception happened 926 volatile address _exception_pc; // PC where exception happened
926 volatile address _exception_handler_pc; // PC for handler of exception 927 volatile address _exception_handler_pc; // PC for handler of exception
927 volatile int _is_method_handle_return; // true (== 1) if the current exception PC is a MethodHandle call site. 928 volatile int _is_method_handle_return; // true (== 1) if the current exception PC is a MethodHandle call site.
928 929
929 // support for compilation
930 bool _is_compiling; // is true if a compilation is active inthis thread (one compilation per thread possible)
931
932 // support for JNI critical regions 930 // support for JNI critical regions
933 jint _jni_active_critical; // count of entries into JNI critical region 931 jint _jni_active_critical; // count of entries into JNI critical region
934 932
935 // For deadlock detection. 933 // For deadlock detection.
936 int _depth_first_number; 934 int _depth_first_number;
1005 1003
1006 void cleanup_failed_attach_current_thread(); 1004 void cleanup_failed_attach_current_thread();
1007 1005
1008 // Testers 1006 // Testers
1009 virtual bool is_Java_thread() const { return true; } 1007 virtual bool is_Java_thread() const { return true; }
1010
1011 // compilation
1012 void set_is_compiling(bool f) { _is_compiling = f; }
1013 bool is_compiling() const { return _is_compiling; }
1014 1008
1015 // Thread chain operations 1009 // Thread chain operations
1016 JavaThread* next() const { return _next; } 1010 JavaThread* next() const { return _next; }
1017 void set_next(JavaThread* p) { _next = p; } 1011 void set_next(JavaThread* p) { _next = p; }
1018 1012
1279 oop exception_oop() const { return _exception_oop; } 1273 oop exception_oop() const { return _exception_oop; }
1280 address exception_pc() const { return _exception_pc; } 1274 address exception_pc() const { return _exception_pc; }
1281 address exception_handler_pc() const { return _exception_handler_pc; } 1275 address exception_handler_pc() const { return _exception_handler_pc; }
1282 bool is_method_handle_return() const { return _is_method_handle_return == 1; } 1276 bool is_method_handle_return() const { return _is_method_handle_return == 1; }
1283 1277
1284 void set_exception_oop(oop o) { _exception_oop = o; } 1278 void set_exception_oop(oop o) { (void)const_cast<oop&>(_exception_oop = o); }
1285 void set_exception_pc(address a) { _exception_pc = a; } 1279 void set_exception_pc(address a) { _exception_pc = a; }
1286 void set_exception_handler_pc(address a) { _exception_handler_pc = a; } 1280 void set_exception_handler_pc(address a) { _exception_handler_pc = a; }
1287 void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; } 1281 void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; }
1282
1283 void clear_exception_oop_and_pc() {
1284 set_exception_oop(NULL);
1285 set_exception_pc(NULL);
1286 }
1288 1287
1289 // Stack overflow support 1288 // Stack overflow support
1290 inline size_t stack_available(address cur_sp); 1289 inline size_t stack_available(address cur_sp);
1291 address stack_yellow_zone_base() 1290 address stack_yellow_zone_base()
1292 { return (address)(stack_base() - (stack_size() - (stack_red_zone_size() + stack_yellow_zone_size()))); } 1291 { return (address)(stack_base() - (stack_size() - (stack_red_zone_size() + stack_yellow_zone_size()))); }
1824 class CompilerThread : public JavaThread { 1823 class CompilerThread : public JavaThread {
1825 friend class VMStructs; 1824 friend class VMStructs;
1826 private: 1825 private:
1827 CompilerCounters* _counters; 1826 CompilerCounters* _counters;
1828 1827
1829 ciEnv* _env; 1828 ciEnv* _env;
1830 CompileLog* _log; 1829 CompileLog* _log;
1831 CompileTask* _task; 1830 CompileTask* _task;
1832 CompileQueue* _queue; 1831 CompileQueue* _queue;
1833 BufferBlob* _buffer_blob; 1832 BufferBlob* _buffer_blob;
1834 1833
1835 nmethod* _scanned_nmethod; // nmethod being scanned by the sweeper 1834 nmethod* _scanned_nmethod; // nmethod being scanned by the sweeper
1835 AbstractCompiler* _compiler;
1836 1836
1837 public: 1837 public:
1838 1838
1839 static CompilerThread* current(); 1839 static CompilerThread* current();
1840 1840
1842 1842
1843 bool is_Compiler_thread() const { return true; } 1843 bool is_Compiler_thread() const { return true; }
1844 // Hide this compiler thread from external view. 1844 // Hide this compiler thread from external view.
1845 bool is_hidden_from_external_view() const { return true; } 1845 bool is_hidden_from_external_view() const { return true; }
1846 1846
1847 CompileQueue* queue() { return _queue; } 1847 void set_compiler(AbstractCompiler* c) { _compiler = c; }
1848 CompilerCounters* counters() { return _counters; } 1848 AbstractCompiler* compiler() const { return _compiler; }
1849
1850 CompileQueue* queue() const { return _queue; }
1851 CompilerCounters* counters() const { return _counters; }
1849 1852
1850 // Get/set the thread's compilation environment. 1853 // Get/set the thread's compilation environment.
1851 ciEnv* env() { return _env; } 1854 ciEnv* env() { return _env; }
1852 void set_env(ciEnv* env) { _env = env; } 1855 void set_env(ciEnv* env) { _env = env; }
1853 1856
1854 BufferBlob* get_buffer_blob() { return _buffer_blob; } 1857 BufferBlob* get_buffer_blob() const { return _buffer_blob; }
1855 void set_buffer_blob(BufferBlob* b) { _buffer_blob = b; }; 1858 void set_buffer_blob(BufferBlob* b) { _buffer_blob = b; };
1856 1859
1857 // Get/set the thread's logging information 1860 // Get/set the thread's logging information
1858 CompileLog* log() { return _log; } 1861 CompileLog* log() { return _log; }
1859 void init_log(CompileLog* log) { 1862 void init_log(CompileLog* log) {