
1: /* Copyright (C) 2001, 2006 Free Software Foundation, Inc. 2: This file is part of the GNU C Library. 3: Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. 4: 5: The GNU C Library is free software; you can redistribute it and/or 6: modify it under the terms of the GNU Lesser General Public 7: License as published by the Free Software Foundation; either 8: version 2.1 of the License, or (at your option) any later version. 9: 10: The GNU C Library is distributed in the hope that it will be useful, 11: but WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: Lesser General Public License for more details. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #ifndef _GAI_MISC_H 21: #define _GAI_MISC_H 1 22: 23: #include <netdb.h> 24: #include <signal.h> 25: 26: 27: /* Used to synchronize. */ 28: struct waitlist 29: { 30: struct waitlist *next; 31: 32: #ifndef DONT_NEED_GAI_MISC_COND 33: pthread_cond_t *cond; 34: #endif 35: volatile int *counterp; 36: /* The next field is used in asynchronous `lio_listio' operations. */ 37: struct sigevent *sigevp; 38: /* XXX See requestlist, it's used to work around the broken signal 39: handling in Linux. */ 40: pid_t caller_pid; 41: }; 42: 43: 44: /* Used to queue requests.. */ 45: struct requestlist 46: { 47: int running; 48: 49: struct requestlist *next; 50: 51: /* Pointer to the actual data. */ 52: struct gaicb *gaicbp; 53: 54: /* List of waiting processes. */ 55: struct waitlist *waiting; 56: }; 57: 58: /* To customize the implementation one can use the following struct. 59: This implementation follows the one in Irix. */ 60: struct gaiinit 61: { 62: int gai_threads; /* Maximal number of threads. */ 63: int gai_num; /* Number of expected simultanious requests. */ 64: int gai_locks; /* Not used. */ 65: int gai_usedba; /* Not used. */ 66: int gai_debug; /* Not used. */ 67: int gai_numusers; /* Not used. */ 68: int gai_idle_time; /* Number of seconds before idle thread 69: terminates. */ 70: int gai_reserved; 71: }; 72: 73: 74: /* Lock for global I/O list of requests. */ 75: extern pthread_mutex_t __gai_requests_mutex; 76: 77: 78: /* Enqueue request. */ 79: extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp) 80: internal_function; 81: 82: /* Find request on wait list. */ 83: extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp) 84: internal_function; 85: 86: /* Remove request from waitlist. */ 87: extern int __gai_remove_request (struct gaicb *gaicbp) 88: internal_function; 89: 90: /* Notify initiator of request and tell this everybody listening. */ 91: extern void __gai_notify (struct requestlist *req) 92: internal_function; 93: 94: /* Notify initiator of request. */ 95: extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid) 96: internal_function; 97: 98: /* Send the signal. */ 99: extern int __gai_sigqueue (int sig, const union sigval val, pid_t caller_pid) 100: internal_function; 101: 102: #endif /* gai_misc.h */