On Jul 6 15:46, Kenton Varda wrote: > Hello Cygwin, > > According to the (Linux) man page: "sigpending() returns the set of > signals that are pending for delivery to the calling thread" > > However, on Cygwin, sigpending() seems to return the set of signals > pending on any thread, as shown in the attached test program. > > Among other things, this can cause deadlocks in programs which use > sigpending() to check for pending signals, then use sigsuspend() to > induce delivery of the specific signals that are pending. Because the > signal is not actually pending on the current thread, sigsuspend() > will unexpectedly block, potentially forever. > > Output of test program: > $ uname -srv > CYGWIN_NT-6.1 3.0.7(0.338/5/3) 2019-04-30 18:08 > $ gcc -std=c11 -Wall test-sigpending.c -o test-sigpending -pthread && > ./test-sigpending > sending signal to child thread with pthread_kill()... > sigpending() says signal is pending in main thread (WRONG) > sigpending() says signal is pending in child thread (CORRECT) > received signal in child thread (CORRECT)
Thanks for the testcase. This should work now in current git master. I uploaded new developer snapshots to https://cygwin.com/snapshots/ Please give them a try. Thanks, Corinna -- Corinna Vinschen Cygwin Maintainer
signature.asc
Description: PGP signature