src/os/windows/vm/os_windows.cpp

changeset 4598
7adae9244bc8
parent 4535
9fae07c31641
child 4711
6b803ba47588
equal deleted inserted replaced
4573:5ee2b330eacd 4598:7adae9244bc8
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) {

mercurial