From 3a9eb648bb714d69623bf0344ae3e6c69b6237f1 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 15 Aug 1999 18:14:36 +0000 Subject: Update. 1999-08-15 Ulrich Drepper * sysdeps/unix/sysv/linux/aio_sigqueue.c: Take extra parameter and initialize si_pid from it. * sysdeps/generic/aio_sigqueue.c (__aio_sigqueue): Take extra parameter. * rt/aio_misc.c (__aio_enqueue_request): Initialize caller_pid. * rt/aio_misc.h (struct waitlist): Add caller_pid element. (struct requestlist): Likewise. Adjust prototypes of __aio_notify_only and __aio_sigqueue. * rt/notify.c (__aio_notify_only): Take extra parameter. Pass it to __aio_sigqueue. (__aio_notify): Pass caller PID to __aio_notify_only. * rt/aio_suspend.c: Initialize caller_pid. * rt/lio_listio.c: Likewise. * rt/lio_listio64.c: Likewise. * rt/lio_listio.c: If nothing has to be done free mutex before signalling. * rt/lio_listio64.c: Likewise. --- rt/aio_misc.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'rt/aio_misc.h') diff --git a/rt/aio_misc.h b/rt/aio_misc.h index af8e2479ba..e3c93bef36 100644 --- a/rt/aio_misc.h +++ b/rt/aio_misc.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -50,6 +50,9 @@ struct waitlist volatile int *counterp; /* The next field is used in asynchronous `lio_listio' operations. */ struct sigevent *sigevp; + /* XXX See requestlist, it's used to work around the broken signal + handling in Linux. */ + pid_t caller_pid; }; @@ -76,6 +79,10 @@ struct requestlist /* Pointer to the actual data. */ aiocb_union *aiocbp; + /* PID of the initiator thread. + XXX This is only necessary for the broken signal handling on Linux. */ + pid_t caller_pid; + /* List of waiting processes. */ struct waitlist *waiting; }; @@ -104,9 +111,11 @@ extern void __aio_free_request (struct requestlist *req) internal_function; extern void __aio_notify (struct requestlist *req) internal_function; /* Notify initiator of request. */ -extern int __aio_notify_only (struct sigevent *sigev) internal_function; +extern int __aio_notify_only (struct sigevent *sigev, pid_t caller_pid) + internal_function; /* Send the signal. */ -extern int __aio_sigqueue (int sig, const union sigval val) internal_function; +extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid) + internal_function; #endif /* aio_misc.h */ -- cgit v1.2.3