On Sat, Dec 03, 2005 at 03:37:32AM +0100, Samuel Thibault wrote:
>Hi,
>
>Igor Pechtchanski, le Fri 02 Dec 2005 20:16:58 -0500, a ?crit :
>> On Sat, 3 Dec 2005, Samuel Thibault wrote:
>> 
>> > [snip]
>> > So SI_USER should rather be defined to 0.
>> > Mmm, btw, SIGALRM sets 0 in si_code, while it should set SI_KERNEL.
>> 
>> A clear case of <http://cygwin.com/acronyms/#PTC>...
>
>The following patch works.
>pthread_kill()'s issue seems trickier.
>
>Regards,
>Samuel
>
>Index: cygwin/timer.cc
>===================================================================
>RCS file: /cvs/src/src/winsup/cygwin/timer.cc,v
>retrieving revision 1.19
>diff -u -r1.19 timer.cc
>--- cygwin/timer.cc    11 Nov 2005 16:42:15 -0000      1.19
>+++ cygwin/timer.cc    3 Dec 2005 02:38:47 -0000
>@@ -167,6 +167,7 @@
>           siginfo_t si;
>           memset (&si, 0, sizeof (si));
>           si.si_signo = tt->evp.sigev_signo;
>+          si.si_code = SI_KERNEL;
>           si.si_sigval.sival_ptr = tt->evp.sigev_value.sival_ptr;
>           debug_printf ("%p sending sig %d", x, tt->evp.sigev_signo);
>           sig_send (myself_nowait, si);
>Index: cygwin/include/cygwin/signal.h
>===================================================================
>RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/signal.h,v
>retrieving revision 1.8
>diff -u -r1.8 signal.h
>--- cygwin/include/cygwin/signal.h     10 Nov 2005 09:12:22 -0000      1.8
>+++ cygwin/include/cygwin/signal.h     3 Dec 2005 02:38:48 -0000
>@@ -102,7 +102,7 @@
> 
> enum
> {
>-  SI_USER = 1,                                /* sent by kill, raise, 
>pthread_kill */
>+  SI_USER = 0,                                /* sent by kill, raise, 
>pthread_kill */
>   SI_ASYNCIO,                         /* sent by AIO completion (currently
>                                          unimplemented) */
>   SI_MESGQ,                           /* sent by real time mesq state change

Thank you for the patch, but there are a couple of problems with it.

- The value for si_code should be SI_TIMER not SI_KERNEL.

- Changing SI_USER could have consequences for existing applications.
I'm willing to change SI_USER to zero and then add a workaround later if
anyone squawks (since this breaks backwards compatibility) but I'm not
willing to change the value of every value in that enum as your change
above does.

So, anyway, I've checked in a fix which addresses the two problems that
you found.  The change is in the latest snapshot.

As far as pthread_kill is concerned, I'm planning on dealing with issues
with threads and signals in 1.5.20.  I don't want to destabilize signal
handling now that 1.5.19 is imminent.  I am not making any guarantees that
things will work better with pthread_kill, in cygwin 1.5.20, however.

cgf

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to