Mercurial > hg > freeDiameter
annotate libfdcore/events.c @ 1240:0420ccc4671a
Add a counter for the sent requests for which we did not wait for an answer. It might be relevant this value contributes to the load estimate of the remote peer, but it is not very reliable
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Thu, 10 Oct 2013 16:30:55 +0200 |
parents | 6a1042d8075b |
children |
rev | line source |
---|---|
82 | 1 /********************************************************************************************************* |
2 * Software License Agreement (BSD License) * | |
740
4a9f08d6b6ba
Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
664
diff
changeset
|
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * |
82 | 4 * * |
1127
1af09cc156d6
Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1093
diff
changeset
|
5 * Copyright (c) 2013, WIDE Project and NICT * |
82 | 6 * All rights reserved. * |
7 * * | |
8 * Redistribution and use of this software in source and binary forms, with or without modification, are * | |
9 * permitted provided that the following conditions are met: * | |
10 * * | |
11 * * Redistributions of source code must retain the above * | |
12 * copyright notice, this list of conditions and the * | |
13 * following disclaimer. * | |
14 * * | |
15 * * Redistributions in binary form must reproduce the above * | |
16 * copyright notice, this list of conditions and the * | |
17 * following disclaimer in the documentation and/or other * | |
18 * materials provided with the distribution. * | |
19 * * | |
20 * * Neither the name of the WIDE Project or NICT nor the * | |
21 * names of its contributors may be used to endorse or * | |
22 * promote products derived from this software without * | |
23 * specific prior written permission of WIDE Project and * | |
24 * NICT. * | |
25 * * | |
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * | |
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * | |
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * | |
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * | |
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * | |
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * | |
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * | |
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * | |
34 *********************************************************************************************************/ | |
35 | |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
36 #include "fdcore-internal.h" |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
37 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
38 /* Events are a subset of fifo queues, with a known type */ |
82 | 39 |
40 int fd_event_send(struct fifo *queue, int code, size_t datasz, void * data) | |
41 { | |
42 struct fd_event * ev; | |
43 CHECK_MALLOC( ev = malloc(sizeof(struct fd_event)) ); | |
44 ev->code = code; | |
45 ev->size = datasz; | |
46 ev->data = data; | |
47 CHECK_FCT( fd_fifo_post(queue, &ev) ); | |
48 return 0; | |
49 } | |
50 | |
51 int fd_event_get(struct fifo *queue, int *code, size_t *datasz, void ** data) | |
52 { | |
53 struct fd_event * ev; | |
54 CHECK_FCT( fd_fifo_get(queue, &ev) ); | |
55 if (code) | |
56 *code = ev->code; | |
57 if (datasz) | |
58 *datasz = ev->size; | |
59 if (data) | |
60 *data = ev->data; | |
61 free(ev); | |
62 return 0; | |
63 } | |
64 | |
65 int fd_event_timedget(struct fifo *queue, struct timespec * timeout, int timeoutcode, int *code, size_t *datasz, void ** data) | |
66 { | |
67 struct fd_event * ev; | |
68 int ret = 0; | |
69 ret = fd_fifo_timedget(queue, &ev, timeout); | |
70 if (ret == ETIMEDOUT) { | |
71 if (code) | |
72 *code = timeoutcode; | |
73 if (datasz) | |
74 *datasz = 0; | |
75 if (data) | |
76 *data = NULL; | |
77 } else { | |
78 CHECK_FCT( ret ); | |
79 if (code) | |
80 *code = ev->code; | |
81 if (datasz) | |
82 *datasz = ev->size; | |
83 if (data) | |
84 *data = ev->data; | |
85 free(ev); | |
86 } | |
87 return 0; | |
88 } | |
89 | |
90 void fd_event_destroy(struct fifo **queue, void (*free_cb)(void * data)) | |
91 { | |
92 struct fd_event * ev; | |
93 /* Purge all events, and free the associated data if any */ | |
94 while (fd_fifo_tryget( *queue, &ev ) == 0) { | |
95 (*free_cb)(ev->data); | |
96 free(ev); | |
97 } | |
98 CHECK_FCT_DO( fd_fifo_del(queue), /* continue */ ); | |
99 return ; | |
100 } | |
101 | |
102 const char * fd_ev_str(int event) | |
103 { | |
104 switch (event) { | |
105 #define case_str( _val )\ | |
106 case _val : return #_val | |
1190
6a1042d8075b
Replace FDEV_TERMINATE events with calls to fd_core_shutdown to handle the core state properly
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1127
diff
changeset
|
107 case_str(FDEV_TERMINATE_INT); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
108 case_str(FDEV_TRIGGER); |
82 | 109 |
110 default: | |
111 TRACE_DEBUG(FULL, "Unknown event : %d", event); | |
112 return "Unknown event"; | |
113 } | |
114 } | |
115 | |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
116 /**********************************************************************/ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
117 /* Trigged events */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
118 /* This allows extensions to register for / send triggers to other extensions */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
119 /* It is used for example for users interactions (through signals or ...) */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
120 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
121 /* Because the number of triggers is not expected to grow, we use a simple ordered chained list */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
122 static pthread_rwlock_t trig_rwl = PTHREAD_RWLOCK_INITIALIZER; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
123 static struct fd_list trig_list = FD_LIST_INITIALIZER(trig_list); /* The list of triggers ordered by trigger value */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
124 struct trig_item { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
125 struct fd_list chain; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
126 int trig_value; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
127 const char * trig_module; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
128 void (*cb)(void); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
129 }; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
130 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
131 /* Add a new entry in the trigger list */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
132 int fd_event_trig_regcb(int trigger_val, const char * module, void (*cb)(void)) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
133 { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
134 struct trig_item * ti; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
135 struct fd_list * li; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
136 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
137 TRACE_ENTRY("%d %p %p", trigger_val, module, cb); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
138 CHECK_PARAMS( trigger_val && cb ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
139 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
140 /* Create a new trig_item */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
141 CHECK_MALLOC( ti = malloc(sizeof(struct trig_item)) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
142 memset(ti, 0, sizeof(struct trig_item)); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
143 fd_list_init(&ti->chain, ti); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
144 ti->trig_value = trigger_val; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
145 ti->trig_module = module; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
146 ti->cb = cb; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
147 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
148 /* Now insert in the list */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
149 CHECK_POSIX( pthread_rwlock_wrlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
150 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
151 for (li = trig_list.next; li != &trig_list; li = li->next) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
152 struct trig_item *t = li->o; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
153 if (t->trig_value >= trigger_val) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
154 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
155 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
156 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
157 fd_list_insert_before(li, &ti->chain); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
158 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
159 CHECK_POSIX( pthread_rwlock_unlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
160 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
161 return 0; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
162 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
163 |
1085
7d7266115a34
Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents:
974
diff
changeset
|
164 DECLARE_FD_DUMP_PROTOTYPE(fd_event_trig_dump) |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
165 { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
166 struct fd_list * li; |
1093
44f3e48dfe27
Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1085
diff
changeset
|
167 FD_DUMP_HANDLE_OFFSET(); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
168 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
169 CHECK_POSIX_DO( pthread_rwlock_rdlock(&trig_rwl), ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
170 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
171 for (li = trig_list.next; li != &trig_list; li = li->next) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
172 struct trig_item *t = li->o; |
1093
44f3e48dfe27
Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1085
diff
changeset
|
173 CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "{signal:%d}'%s'->%p ", t->trig_value, t->trig_module, t->cb), break); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
174 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
175 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
176 CHECK_POSIX_DO( pthread_rwlock_unlock(&trig_rwl), ); |
1085
7d7266115a34
Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents:
974
diff
changeset
|
177 return *buf; |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
178 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
179 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
180 static void *call_cb_detached(void * arg) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
181 { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
182 void (*cb)(void) = arg; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
183 fd_log_threadname("Trig'd callback thread"); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
184 TRACE_ENTRY("%p", arg); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
185 (*cb)(); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
186 TRACE_DEBUG(ANNOYING, "Callback %p completed", cb); |
664
c1ef1c39e8a5
Fix compilation warning
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
662
diff
changeset
|
187 return NULL; |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
188 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
189 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
190 int fd_event_trig_call_cb(int trigger_val) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
191 { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
192 struct fd_list * li; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
193 pthread_attr_t detached; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
194 pthread_t th; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
195 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
196 CHECK_POSIX( pthread_attr_init(&detached) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
197 CHECK_POSIX( pthread_attr_setdetachstate(&detached, PTHREAD_CREATE_DETACHED) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
198 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
199 CHECK_POSIX( pthread_rwlock_rdlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
200 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
201 for (li = trig_list.next; li != &trig_list; li = li->next) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
202 struct trig_item *t = li->o; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
203 if (t->trig_value == trigger_val) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
204 TRACE_DEBUG(FULL, "Trigger %d: Calling %p in %s", t->trig_value, t->cb, t->trig_module); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
205 CHECK_POSIX_DO( pthread_create( &th, &detached, call_cb_detached, t->cb ), break ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
206 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
207 if (t->trig_value > trigger_val) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
208 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
209 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
210 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
211 CHECK_POSIX( pthread_rwlock_unlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
212 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
213 return 0; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
214 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
215 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
216 int fd_event_trig_fini(void) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
217 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
218 TRACE_ENTRY(""); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
219 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
220 CHECK_POSIX( pthread_rwlock_wrlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
221 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
222 while (!FD_IS_LIST_EMPTY(&trig_list)) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
223 struct fd_list * li = trig_list.next; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
224 fd_list_unlink(li); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
225 free(li); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
226 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
227 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
228 CHECK_POSIX( pthread_rwlock_unlock(&trig_rwl) ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
229 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
230 return 0; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
82
diff
changeset
|
231 } |