4
4
* Copyright (c) 2016 Christopher Haster
5
5
* Distributed under the MIT license
6
6
*/
7
- #include "events .h"
7
+ #include "equeue .h"
8
8
9
9
#include <stdlib.h>
10
10
#include <string.h>
@@ -29,23 +29,23 @@ int equeue_create_inplace(equeue_t *q, unsigned size, void *buffer) {
29
29
30
30
q -> queue = 0 ;
31
31
q -> next_id = 42 ;
32
- q -> break_ = (struct event ){
32
+ q -> break_ = (struct equeue_event ){
33
33
.id = 0 ,
34
34
.period = -1 ,
35
35
};
36
36
37
37
int err ;
38
- err = events_sema_create (& q -> eventsema );
38
+ err = equeue_sema_create (& q -> eventsema );
39
39
if (err < 0 ) {
40
40
return err ;
41
41
}
42
42
43
- err = events_mutex_create (& q -> queuelock );
43
+ err = equeue_mutex_create (& q -> queuelock );
44
44
if (err < 0 ) {
45
45
return err ;
46
46
}
47
47
48
- err = events_mutex_create (& q -> freelock );
48
+ err = equeue_mutex_create (& q -> freelock );
49
49
if (err < 0 ) {
50
50
return err ;
51
51
}
@@ -55,14 +55,14 @@ int equeue_create_inplace(equeue_t *q, unsigned size, void *buffer) {
55
55
56
56
void equeue_destroy (equeue_t * q ) {
57
57
while (q -> queue ) {
58
- struct event * e = q -> queue ;
58
+ struct equeue_event * e = q -> queue ;
59
59
q -> queue = e -> next ;
60
60
equeue_dealloc (q , e + 1 );
61
61
}
62
62
63
- events_mutex_destroy (& q -> freelock );
64
- events_mutex_destroy (& q -> queuelock );
65
- events_sema_destroy (& q -> eventsema );
63
+ equeue_mutex_destroy (& q -> freelock );
64
+ equeue_mutex_destroy (& q -> queuelock );
65
+ equeue_sema_destroy (& q -> eventsema );
66
66
free (q -> buffer );
67
67
}
68
68
@@ -74,7 +74,7 @@ static void *equeue_mem_alloc(equeue_t *q, unsigned size) {
74
74
size = sizeof (struct equeue_chunk );
75
75
}
76
76
77
- events_mutex_lock (& q -> freelock );
77
+ equeue_mutex_lock (& q -> freelock );
78
78
79
79
for (struct equeue_chunk * * p = & q -> chunks ; * p ; p = & (* p )-> nchunk ) {
80
80
if ((* p )-> size >= size ) {
@@ -85,7 +85,7 @@ static void *equeue_mem_alloc(equeue_t *q, unsigned size) {
85
85
} else {
86
86
* p = c -> nchunk ;
87
87
}
88
- events_mutex_unlock (& q -> freelock );
88
+ equeue_mutex_unlock (& q -> freelock );
89
89
return (unsigned * )c + 1 ;
90
90
}
91
91
}
@@ -95,18 +95,18 @@ static void *equeue_mem_alloc(equeue_t *q, unsigned size) {
95
95
q -> slab .data += size ;
96
96
q -> slab .size -= size ;
97
97
c -> size = size ;
98
- events_mutex_unlock (& q -> freelock );
98
+ equeue_mutex_unlock (& q -> freelock );
99
99
return (unsigned * )c + 1 ;
100
100
}
101
101
102
- events_mutex_unlock (& q -> freelock );
102
+ equeue_mutex_unlock (& q -> freelock );
103
103
return 0 ;
104
104
}
105
105
106
106
static void equeue_mem_dealloc (equeue_t * q , void * e ) {
107
107
struct equeue_chunk * c = (struct equeue_chunk * )((unsigned * )e - 1 );
108
108
109
- events_mutex_lock (& q -> freelock );
109
+ equeue_mutex_lock (& q -> freelock );
110
110
111
111
struct equeue_chunk * * p = & q -> chunks ;
112
112
while (* p && (* p )-> size < c -> size ) {
@@ -122,7 +122,7 @@ static void equeue_mem_dealloc(equeue_t *q, void *e) {
122
122
}
123
123
* p = c ;
124
124
125
- events_mutex_unlock (& q -> freelock );
125
+ equeue_mutex_unlock (& q -> freelock );
126
126
}
127
127
128
128
// event allocation functions
@@ -135,7 +135,8 @@ static inline int equeue_next_id(equeue_t *q) {
135
135
}
136
136
137
137
void * equeue_alloc (equeue_t * q , unsigned size ) {
138
- struct event * e = equeue_mem_alloc (q , sizeof (struct event ) + size );
138
+ struct equeue_event * e = equeue_mem_alloc (q ,
139
+ sizeof (struct equeue_event ) + size );
139
140
if (!e ) {
140
141
return 0 ;
141
142
}
@@ -149,7 +150,7 @@ void *equeue_alloc(equeue_t *q, unsigned size) {
149
150
}
150
151
151
152
void equeue_dealloc (equeue_t * q , void * p ) {
152
- struct event * e = (struct event * )p - 1 ;
153
+ struct equeue_event * e = (struct equeue_event * )p - 1 ;
153
154
154
155
if (e -> dtor ) {
155
156
e -> dtor (e + 1 );
@@ -163,10 +164,10 @@ static inline int equeue_tickdiff(unsigned a, unsigned b) {
163
164
return (int )(a - b );
164
165
}
165
166
166
- static void equeue_enqueue (equeue_t * q , struct event * e , unsigned ms ) {
167
- e -> target = events_tick () + ms ;
167
+ static void equeue_enqueue (equeue_t * q , struct equeue_event * e , unsigned ms ) {
168
+ e -> target = equeue_tick () + ms ;
168
169
169
- struct event * * p = & q -> queue ;
170
+ struct equeue_event * * p = & q -> queue ;
170
171
while (* p && equeue_tickdiff ((* p )-> target , e -> target ) <= 0 ) {
171
172
p = & (* p )-> next ;
172
173
}
@@ -175,10 +176,10 @@ static void equeue_enqueue(equeue_t *q, struct event *e, unsigned ms) {
175
176
* p = e ;
176
177
}
177
178
178
- static struct event * equeue_dequeue (equeue_t * q , int id ) {
179
- for (struct event * * p = & q -> queue ; * p ; p = & (* p )-> next ) {
179
+ static struct equeue_event * equeue_dequeue (equeue_t * q , int id ) {
180
+ for (struct equeue_event * * p = & q -> queue ; * p ; p = & (* p )-> next ) {
180
181
if ((* p )-> id == id ) {
181
- struct event * e = * p ;
182
+ struct equeue_event * e = * p ;
182
183
* p = (* p )-> next ;
183
184
return e ;
184
185
}
@@ -187,32 +188,32 @@ static struct event *equeue_dequeue(equeue_t *q, int id) {
187
188
return 0 ;
188
189
}
189
190
190
- static int equeue_post_in (equeue_t * q , struct event * e , int ms ) {
191
+ static int equeue_post_in (equeue_t * q , struct equeue_event * e , int ms ) {
191
192
int id = e -> id ;
192
193
if (ms < 0 ) {
193
194
equeue_dealloc (q , e + 1 );
194
195
return id ;
195
196
}
196
197
197
- events_mutex_lock (& q -> queuelock );
198
+ equeue_mutex_lock (& q -> queuelock );
198
199
equeue_enqueue (q , e , ms );
199
- events_mutex_unlock (& q -> queuelock );
200
+ equeue_mutex_unlock (& q -> queuelock );
200
201
201
- events_sema_release (& q -> eventsema );
202
+ equeue_sema_release (& q -> eventsema );
202
203
return id ;
203
204
}
204
205
205
206
int equeue_post (equeue_t * q , void (* cb )(void * ), void * p ) {
206
- struct event * e = (struct event * )p - 1 ;
207
+ struct equeue_event * e = (struct equeue_event * )p - 1 ;
207
208
e -> cb = cb ;
208
209
int id = equeue_post_in (q , e , e -> target );
209
210
return id ;
210
211
}
211
212
212
213
void equeue_cancel (equeue_t * q , int id ) {
213
- events_mutex_lock (& q -> queuelock );
214
- struct event * e = equeue_dequeue (q , id );
215
- events_mutex_unlock (& q -> queuelock );
214
+ equeue_mutex_lock (& q -> queuelock );
215
+ struct equeue_event * e = equeue_dequeue (q , id );
216
+ equeue_mutex_unlock (& q -> queuelock );
216
217
217
218
if (e ) {
218
219
equeue_dealloc (q , e + 1 );
@@ -234,27 +235,27 @@ void equeue_dispatch(equeue_t *q, int ms) {
234
235
while (q -> queue ) {
235
236
deadline = -1 ;
236
237
237
- events_mutex_lock (& q -> queuelock );
238
+ equeue_mutex_lock (& q -> queuelock );
238
239
if (!q -> queue ) {
239
- events_mutex_unlock (& q -> queuelock );
240
+ equeue_mutex_unlock (& q -> queuelock );
240
241
break ;
241
242
}
242
243
243
- deadline = equeue_tickdiff (q -> queue -> target , events_tick ());
244
+ deadline = equeue_tickdiff (q -> queue -> target , equeue_tick ());
244
245
if (deadline > 0 ) {
245
- events_mutex_unlock (& q -> queuelock );
246
+ equeue_mutex_unlock (& q -> queuelock );
246
247
break ;
247
248
}
248
249
249
- struct event * e = q -> queue ;
250
+ struct equeue_event * e = q -> queue ;
250
251
q -> queue = e -> next ;
251
252
252
253
if (e -> period >= 0 ) {
253
254
// requeue periodic tasks to avoid race conditions
254
255
// in equeue_cancel
255
256
equeue_enqueue (q , e , e -> period );
256
257
}
257
- events_mutex_unlock (& q -> queuelock );
258
+ equeue_mutex_unlock (& q -> queuelock );
258
259
259
260
if (e == & q -> break_ ) {
260
261
return ;
@@ -268,23 +269,23 @@ void equeue_dispatch(equeue_t *q, int ms) {
268
269
}
269
270
}
270
271
271
- events_sema_wait (& q -> eventsema , deadline );
272
+ equeue_sema_wait (& q -> eventsema , deadline );
272
273
}
273
274
}
274
275
275
276
// event functions
276
- void event_delay (void * p , int ms ) {
277
- struct event * e = (struct event * )p - 1 ;
277
+ void equeue_event_delay (void * p , int ms ) {
278
+ struct equeue_event * e = (struct equeue_event * )p - 1 ;
278
279
e -> target = ms ;
279
280
}
280
281
281
- void event_period (void * p , int ms ) {
282
- struct event * e = (struct event * )p - 1 ;
282
+ void equeue_event_period (void * p , int ms ) {
283
+ struct equeue_event * e = (struct equeue_event * )p - 1 ;
283
284
e -> period = ms ;
284
285
}
285
286
286
- void event_dtor (void * p , void (* dtor )(void * )) {
287
- struct event * e = (struct event * )p - 1 ;
287
+ void equeue_event_dtor (void * p , void (* dtor )(void * )) {
288
+ struct equeue_event * e = (struct equeue_event * )p - 1 ;
288
289
e -> dtor = dtor ;
289
290
}
290
291
@@ -316,7 +317,7 @@ int equeue_call_in(equeue_t *q, int ms, void (*cb)(void*), void *data) {
316
317
return 0 ;
317
318
}
318
319
319
- event_delay (e , ms );
320
+ equeue_event_delay (e , ms );
320
321
e -> cb = cb ;
321
322
e -> data = data ;
322
323
return equeue_post (q , ecallback_dispatch , e );
@@ -328,8 +329,8 @@ int equeue_call_every(equeue_t *q, int ms, void (*cb)(void*), void *data) {
328
329
return 0 ;
329
330
}
330
331
331
- event_delay (e , ms );
332
- event_period (e , ms );
332
+ equeue_event_delay (e , ms );
333
+ equeue_event_period (e , ms );
333
334
e -> cb = cb ;
334
335
e -> data = data ;
335
336
return equeue_post (q , ecallback_dispatch , e );
0 commit comments