On Sun, Jun 16, 2013 at 09:11:21AM -0400, Ken Brown wrote: >[Adding the bug address back to the CC so that this gets archived.] > >On 6/15/2013 9:54 AM, Angelo Graziosi wrote: >> Christopher Faylor wrote >>>> On 06/14/2013 11:03 AM, Christopher Faylor wrote: >>>>> You pointed to an archived mail messages which implies that was fixed >>>>> more than a year ago. What makes you think it is still a problem? >>>> >>>> The message I pointed to >>>> <http://cygwin.com/ml/cygwin/2012-05/msg00472.html> says this: >>>> >>>>> Testcase signal/kill: Signals may or may not reach the correct thread >>>>> with 1.7.12-1 and newer. >>>> >>>> Confirmed. I think the reason is that we only have a single event to >>>> signal that a POSIX signal arrived instead of a per-thread event, but >>>> I'm not sure. This is cgf's domain so I leave it at that for now. >>>> >>>> I interpreted this to mean "the existence of the bug is confirmed, >>>> here's why the bug occurs, and I'll let cgf deal with it". I didn't >>>> see any followup message where cgf (is that you?) dealt with it. My >>>> apologies if I misinterpreted the email. >>> >>> Oops. I didn't read Corinna's message as thoroughly as I should have. >>> Sorry. >>> >>> That particular issue was supposed to have been fixed in Cygwin 1.7.17, >>> released in October 2012. >> >> Out of curiosity, I tried the test cases I found in that thread, more >> precisely here: >> >> http://cygwin.com/ml/cygwin/2012-05/msg00434.html >> >> >> and the results are: >> >> $ gcc otto_test1.c -o otto_test1 >> $ ./otto_test1 >> Testing deferred pthread_cancel() >> >> Thread 0 starting (0x200102c0) >> Thread 1 starting (0x20010360) >> Thread 2 starting (0x20010400) >> >> Cancelling thread 2 (0x20010400) >> Thread 2 exiting (0x20010400) >> Cancelling thread 1 (0x20010360) >> Thread 1 exiting (0x20010360) >> Cancelling thread 0 (0x200102c0) >> Thread 0 exiting (0x200102c0) >> >> Thread 0 is gone (0x200102c0) >> Thread 1 is gone (0x20010360) >> Thread 2 is gone (0x20010400) >> >> $ gcc otto_test2.c -o otto_test2 >> $ ./otto_test2 >> Testing asynchronous pthread_cancel() >> >> Thread 0 starting (0x200102c0) >> Changing canceltype from 0 to 1 >> Thread 1 starting (0x20010360) >> Changing canceltype from 0 to 1 >> Thread 2 starting (0x20010400) >> Changing canceltype from 0 to 1 >> >> Cancelling thread 2 (0x20010400) >> Thread 2 exiting (0x20010400) >> Cancelling thread 1 (0x20010360) >> Thread 1 exiting (0x20010360) >> Cancelling thread 0 (0x200102c0) >> Thread 0 exiting (0x200102c0) >> >> Thread 0 is gone (0x200102c0) >> Thread 1 is gone (0x20010360) >> Thread 2 is gone (0x20010400) >> >> $ gcc otto_test3.c -o otto_test3 >> $ ./otto_test3 >> Testing pthread_kill() >> >> Thread 0 starting (0x200102c0) >> Thread 1 starting (0x20010360) >> Thread 2 starting (0x20010400) >> >> Sending SIGUSR1 to thread 2 (0x20010400) >> Thread 2 executes signal handler (0x20010400) >> Thread 2 encountered an error: Interrupted system call (0x20010400) >> Sending SIGUSR1 to thread 1 (0x20010360) >> Thread 1 executes signal handler (0x20010360) >> Thread 1 encountered an error: Interrupted system call (0x20010360) >> Sending SIGUSR1 to thread 0 (0x200102c0) >> Thread 0 executes signal handler (0x200102c0) >> Thread 0 encountered an error: Interrupted system call (0x200102c0) >> >> Are the errors in the last test case to be expected under the 20130612 >> snapshot (CYGWIN_NT-5.1, 1.7.21s 20130612 21:06:59, i686 Cygwin)? > >I can replicate this on my system, consistently. There's clearly a >problem, but it's not the same as in the original Cygwin bug report. In >the present case, the signal is received by the right thread, but >something goes wrong afterwards.
Try it on Linux. I don't see any difference. "An error" in this case seems to be the script working as designed. % man sem_wait SEM_WAIT(3) Linux Programmer's Manual SEM_WAIT(3) NAME sem_wait, sem_timedwait, sem_trywait - lock a semaphore ... ERRORS EINTR The call was interrupted by a signal handler; see signal(7). ... cgf -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple