Update.
[platform/upstream/glibc.git] / resolv / gai_misc.h
1 /* Copyright (C) 2001 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 Library General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    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    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public
16    License along with the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 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     pthread_cond_t *cond;
33     volatile int *counterp;
34     /* The next field is used in asynchronous `lio_listio' operations.  */
35     struct sigevent *sigevp;
36     /* XXX See requestlist, it's used to work around the broken signal
37        handling in Linux.  */
38     pid_t caller_pid;
39   };
40
41
42 /* Used to queue requests..  */
43 struct requestlist
44   {
45     int running;
46
47     struct requestlist *next;
48
49     /* Pointer to the actual data.  */
50     struct gaicb *gaicbp;
51
52     /* List of waiting processes.  */
53     struct waitlist *waiting;
54   };
55
56 /* To customize the implementation one can use the following struct.
57    This implementation follows the one in Irix.  */
58 struct gaiinit
59   {
60     int gai_threads;            /* Maximal number of threads.  */
61     int gai_num;                /* Number of expected simultanious requests. */
62     int gai_locks;              /* Not used.  */
63     int gai_usedba;             /* Not used.  */
64     int gai_debug;              /* Not used.  */
65     int gai_numusers;           /* Not used.  */
66     int gai_idle_time;          /* Number of seconds before idle thread
67                                    terminates.  */
68     int gai_reserved;
69   };
70
71
72 /* Lock for global I/O list of requests.  */
73 extern pthread_mutex_t __gai_requests_mutex;
74
75
76 /* Enqueue request.  */
77 extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp)
78      internal_function;
79
80 /* Find request on wait list.  */
81 extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp)
82      internal_function;
83
84 /* Remove request from waitlist.  */
85 extern int __gai_remove_request (struct gaicb *gaicbp)
86      internal_function;
87
88 /* Notify initiator of request and tell this everybody listening.  */
89 extern void __gai_notify (struct requestlist *req)
90      internal_function;
91
92 /* Notify initiator of request.  */
93 extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid)
94      internal_function;
95
96 /* Send the signal.  */
97 extern int __gai_sigqueue (int sig, const union sigval val, pid_t caller_pid)
98      internal_function;
99
100 #endif /* gai_misc.h */