This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
Re: [PATCH v2 1/3] Posix asynchronous I/O support: aio files
Hi Corinna,
I found a discrepancy in the Cygwin source tree and would like input on
how to resolve it...
On Thu, 19 Apr 2018, Corinna Vinschen wrote:
+static void
+aionotify (struct aiocb *aio)
+{
+ /* if signal notification wanted, send AIO-complete signal */
+ //XXX Is sigqueue() the best way to send signo+value within same process?
+ if (aio->aio_sigevent.sigev_notify == SIGEV_SIGNAL)
+ sigqueue (mypid,
+ aio->aio_sigevent.sigev_signo,
+ aio->aio_sigevent.sigev_value);
Given you have direct access to pinfo, you can just as well call
sig_send (myself, ...). This also drop the requirement to know your pid.
While making the change from sigqueue() to sig_send() I was researching
siginfo_t, and I found that the values for element si_code in Cygwin's
/usr/include/sys/signal.h...
/* Signal Actions, P1003.1b-1993, p. 64 */
/* si_code values, p. 66 */
#define SI_USER 1 /* Sent by a user. kill(), abort(), etc */
#define SI_QUEUE 2 /* Sent by sigqueue() */
#define SI_TIMER 3 /* Sent by expiration of a timer_settime() timer */
#define SI_ASYNCIO 4 /* Indicates completion of asycnhronous IO */
#define SI_MESGQ 5 /* Indicates arrival of a message at an empty queue */
typedef struct {
int si_signo; /* Signal number */
int si_code; /* Cause of the signal */
union sigval si_value; /* Signal value */
} siginfo_t;
...are inconsistent with the enum values in internal file
winsup/cygwin/include/cygwin/signal.h...
enum
{
SI_USER = 0, /* sent by kill, raise, pthread_kill */
SI_ASYNCIO = 2, /* sent by AIO completion (currently unimplemented) */
SI_MESGQ, /* sent by real time mesq state change
(currently unimplemented) */
SI_TIMER, /* sent by timer expiration */
SI_QUEUE, /* sent by sigqueue */
SI_KERNEL, /* sent by system */
ILL_ILLOPC, /* illegal opcode */
ILL_ILLOPN, /* illegal operand */
[...]
};
I figure it's the /usr/include/sys/signal.h defines that should be
changed, given that Posix doesn't specify values but only the names of
the values. And the winsup* enum values are the ones used internally so
should likely not be changed.
Does this sound like the right way to go?
Thanks,
..mark