hotspot/src/os/windows/vm/os_windows.cpp
changeset 18943 7d0ef675e808
parent 18683 a6418e038255
child 18945 1225c36dacd3
equal deleted inserted replaced
18942:705506c1bf49 18943:7d0ef675e808
  4682     jio_fprintf(stderr,
  4682     jio_fprintf(stderr,
  4683       "Could not open pause file '%s', continuing immediately.\n", filename);
  4683       "Could not open pause file '%s', continuing immediately.\n", filename);
  4684   }
  4684   }
  4685 }
  4685 }
  4686 
  4686 
       
  4687 os::WatcherThreadCrashProtection::WatcherThreadCrashProtection() {
       
  4688   assert(Thread::current()->is_Watcher_thread(), "Must be WatcherThread");
       
  4689 }
       
  4690 
       
  4691 /*
       
  4692  * See the caveats for this class in os_windows.hpp
       
  4693  * Protects the callback call so that raised OS EXCEPTIONS causes a jump back
       
  4694  * into this method and returns false. If no OS EXCEPTION was raised, returns
       
  4695  * true.
       
  4696  * The callback is supposed to provide the method that should be protected.
       
  4697  */
       
  4698 bool os::WatcherThreadCrashProtection::call(os::CrashProtectionCallback& cb) {
       
  4699   assert(Thread::current()->is_Watcher_thread(), "Only for WatcherThread");
       
  4700   assert(!WatcherThread::watcher_thread()->has_crash_protection(),
       
  4701       "crash_protection already set?");
       
  4702 
       
  4703   bool success = true;
       
  4704   __try {
       
  4705     WatcherThread::watcher_thread()->set_crash_protection(this);
       
  4706     cb.call();
       
  4707   } __except(EXCEPTION_EXECUTE_HANDLER) {
       
  4708     // only for protection, nothing to do
       
  4709     success = false;
       
  4710   }
       
  4711   WatcherThread::watcher_thread()->set_crash_protection(NULL);
       
  4712   return success;
       
  4713 }
       
  4714 
  4687 // An Event wraps a win32 "CreateEvent" kernel handle.
  4715 // An Event wraps a win32 "CreateEvent" kernel handle.
  4688 //
  4716 //
  4689 // We have a number of choices regarding "CreateEvent" win32 handle leakage:
  4717 // We have a number of choices regarding "CreateEvent" win32 handle leakage:
  4690 //
  4718 //
  4691 // 1:  When a thread dies return the Event to the EventFreeList, clear the ParkHandle
  4719 // 1:  When a thread dies return the Event to the EventFreeList, clear the ParkHandle