/* Copyright (C) 2001, 2006 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #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 */