src/server/daemon/event_linux.h

changeset 545
720893ec7d48
parent 541
1e1fca11aaff
child 547
280bf87c8689
equal deleted inserted replaced
544:27684460629f 545:720893ec7d48
30 #define EVENT_LINUX_H 30 #define EVENT_LINUX_H
31 31
32 #include "event.h" 32 #include "event.h"
33 #include <inttypes.h> 33 #include <inttypes.h>
34 34
35 #include <cx/list.h>
36
35 #ifdef __cplusplus 37 #ifdef __cplusplus
36 extern "C" { 38 extern "C" {
37 #endif 39 #endif
40
41 #define EV_QUEUE_RESERVE 8
42
43 typedef struct EventQueue EventQueue;
38 44
39 typedef struct EventHandlerLinux { 45 typedef struct EventHandlerLinux {
40 /* 46 /*
41 * base eventhandler elements (fnreturn, watchlist) 47 * base eventhandler elements (fnreturn, watchlist)
42 */ 48 */
44 50
45 /* 51 /*
46 * epoll fd 52 * epoll fd
47 */ 53 */
48 int ep; 54 int ep;
55
49 /* 56 /*
50 * pipe read fd 57 * eventfd for notifying that new elements
58 * in the event_queue are available
51 */ 59 */
52 int eventin; 60 int event_fd;
61
53 /* 62 /*
54 * pipe write fd 63 * queue for custom events (event_send)
64 * each block can contain up to EV_MAX_EVENTS events
65 * the event loop should not retrieve more than one block
66 *
67 * first queue block
55 */ 68 */
56 int eventout; 69 EventQueue *queue_begin;
70
71 /*
72 * last queue block
73 */
74 EventQueue *queue_end;
75
76 /*
77 * allocated unused blocks
78 */
79 EventQueue *reserve_block[EV_QUEUE_RESERVE];
80
81 /*
82 * number of unused blocks
83 */
84 size_t num_reserve;
85
86 /*
87 * mutex for event_queue
88 */
89 pthread_mutex_t queue_lock;
57 } EventHandlerLinux; 90 } EventHandlerLinux;
91
92 struct EventQueue {
93 /*
94 * array of events
95 */
96 Event *events[EV_MAX_EVENTS];
97 /*
98 * number of events
99 */
100 size_t numevents;
101 /*
102 * next event block
103 */
104 EventQueue *next;
105 };
58 106
59 void ev_handle_events(EventHandlerLinux *ev); 107 void ev_handle_events(EventHandlerLinux *ev);
60 108
61 int ev_convert2sys_events(int events); 109 int ev_convert2sys_events(int events);
62 110

mercurial