Mercurial > hg > graal-jvmci-8
comparison src/os/windows/vm/os_windows.cpp @ 8057:7adae9244bc8
8007312: null check signal semaphore in os::signal_notify windows
Reviewed-by: dholmes, sla
author | mgronlun |
---|---|
date | Wed, 13 Feb 2013 11:23:46 +0100 |
parents | 9fae07c31641 |
children | 5fc51c1ecdeb 6b803ba47588 |
comparison
equal
deleted
inserted
replaced
8032:5ee2b330eacd | 8057: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) { |