| /* Copyright (C) 2001-2014 Free Software Foundation, Inc. |
| This file is part of the GNU C Library. |
| Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. |
| |
| The GNU C Library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public |
| License as published by the Free Software Foundation; either |
| version 2.1 of the License, or (at your option) any later version. |
| |
| The GNU C Library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public |
| License along with the GNU C Library; if not, see |
| <http://www.gnu.org/licenses/>. */ |
| |
| #ifndef _GAI_MISC_H |
| #define _GAI_MISC_H 1 |
| |
| #include <netdb.h> |
| #include <signal.h> |
| |
| |
| /* Used to synchronize. */ |
| struct waitlist |
| { |
| struct waitlist *next; |
| |
| #ifndef DONT_NEED_GAI_MISC_COND |
| pthread_cond_t *cond; |
| #endif |
| 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; |
| }; |
| |
| |
| /* Used to queue requests.. */ |
| struct requestlist |
| { |
| int running; |
| |
| struct requestlist *next; |
| |
| /* Pointer to the actual data. */ |
| struct gaicb *gaicbp; |
| |
| /* List of waiting processes. */ |
| struct waitlist *waiting; |
| }; |
| |
| /* To customize the implementation one can use the following struct. |
| This implementation follows the one in Irix. */ |
| struct gaiinit |
| { |
| int gai_threads; /* Maximal number of threads. */ |
| int gai_num; /* Number of expected simultanious requests. */ |
| int gai_locks; /* Not used. */ |
| int gai_usedba; /* Not used. */ |
| int gai_debug; /* Not used. */ |
| int gai_numusers; /* Not used. */ |
| int gai_idle_time; /* Number of seconds before idle thread |
| terminates. */ |
| int gai_reserved; |
| }; |
| |
| |
| /* Lock for global I/O list of requests. */ |
| extern pthread_mutex_t __gai_requests_mutex; |
| |
| |
| /* Enqueue request. */ |
| extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp) |
| internal_function; |
| |
| /* Find request on wait list. */ |
| extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp) |
| internal_function; |
| |
| /* Remove request from waitlist. */ |
| extern int __gai_remove_request (struct gaicb *gaicbp) |
| internal_function; |
| |
| /* Notify initiator of request and tell this everybody listening. */ |
| extern void __gai_notify (struct requestlist *req) |
| internal_function; |
| |
| /* Notify initiator of request. */ |
| extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid) |
| internal_function; |
| |
| /* Send the signal. */ |
| extern int __gai_sigqueue (int sig, const union sigval val, pid_t caller_pid) |
| internal_function; |
| |
| #endif /* gai_misc.h */ |