hotspot/src/os/windows/vm/os_windows.cpp
changeset 15733 5bd5dc5b9bb9
parent 15475 73896d91270c
child 15927 f256c20146f4
equal deleted inserted replaced
15602:d069aaa14d4c 15733:5bd5dc5b9bb9
  1938   return NSIG;
  1938   return NSIG;
  1939 }
  1939 }
  1940 
  1940 
  1941 // a counter for each possible signal value, including signal_thread exit signal
  1941 // a counter for each possible signal value, including signal_thread exit signal
  1942 static volatile jint pending_signals[NSIG+1] = { 0 };
  1942 static volatile jint pending_signals[NSIG+1] = { 0 };
  1943 static HANDLE sig_sem;
  1943 static HANDLE sig_sem = NULL;
  1944 
  1944 
  1945 void os::signal_init_pd() {
  1945 void os::signal_init_pd() {
  1946   // Initialize signal structures
  1946   // Initialize signal structures
  1947   memset((void*)pending_signals, 0, sizeof(pending_signals));
  1947   memset((void*)pending_signals, 0, sizeof(pending_signals));
  1948 
  1948 
  1968   }
  1968   }
  1969 }
  1969 }
  1970 
  1970 
  1971 void os::signal_notify(int signal_number) {
  1971 void os::signal_notify(int signal_number) {
  1972   BOOL ret;
  1972   BOOL ret;
  1973 
  1973   if (sig_sem != NULL) {
  1974   Atomic::inc(&pending_signals[signal_number]);
  1974     Atomic::inc(&pending_signals[signal_number]);
  1975   ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
  1975     ret = ::ReleaseSemaphore(sig_sem, 1, NULL);
  1976   assert(ret != 0, "ReleaseSemaphore() failed");
  1976     assert(ret != 0, "ReleaseSemaphore() failed");
       
  1977   }
  1977 }
  1978 }
  1978 
  1979 
  1979 static int check_pending_signals(bool wait_for_signal) {
  1980 static int check_pending_signals(bool wait_for_signal) {
  1980   DWORD ret;
  1981   DWORD ret;
  1981   while (true) {
  1982   while (true) {