src/os/windows/vm/os_windows.hpp

Print this page

        

@@ -34,10 +34,11 @@
 static const char* line_separator() { return "\r\n"; }
 static const char* path_separator() { return ";"; }
 
 class win32 {
   friend class os;
+  friend unsigned __stdcall java_start(class Thread*);
 
  protected:
   static int    _vm_page_size;
   static int    _vm_allocation_granularity;
   static int    _processor_type;

@@ -45,10 +46,11 @@
   static julong _physical_memory;
   static size_t _default_stack_size;
   static bool   _is_nt;
   static bool   _is_windows_2003;
   static bool   _is_windows_server;
+  static bool   _has_exit_bug;
   static bool   _has_performance_count;
 
   static void print_windows_version(outputStream* st);
 
  public:

@@ -68,10 +70,14 @@
 
   // load dll from Windows system directory or Windows directory
   static HINSTANCE load_Windows_dll(const char* name, char *ebuf, int ebuflen);
 
   private:
+  enum Ept { EPT_THREAD, EPT_PROCESS, EPT_PROCESS_DIE };
+  // Wrapper around _endthreadex(), exit() and _exit()
+  static int exit_process_or_thread(Ept what, int exit_code);
+
     static void initialize_performance_counter();
 
  public:
   // Generic interface:
 

@@ -86,10 +92,13 @@
   static bool is_windows_server() { return _is_windows_server; }
 
   // Tells whether the platform is Windows 2003
   static bool is_windows_2003() { return _is_windows_2003; }
 
+  // Tells whether there can be the race bug during process exit on this platform
+  static bool has_exit_bug() { return _has_exit_bug; }
+
   // Returns the byte size of a virtual memory page
   static int vm_page_size() { return _vm_page_size; }
 
   // Returns the size in bytes of memory blocks which can be allocated.
   static int vm_allocation_granularity() { return _vm_allocation_granularity; }