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 |