31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#import "OFNull.h"
#import "OFInitializationFailedException.h"
#import "OFObserveFailedException.h"
#define EVENTLIST_SIZE 64
static const of_map_table_functions_t mapFunctions = { NULL };
@implementation OFEpollKernelEventObserver
- (instancetype)init
{
self = [super init];
@try {
|
|
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#import "OFNull.h"
#import "OFInitializationFailedException.h"
#import "OFObserveFailedException.h"
#define EVENTLIST_SIZE 64
static const OFMapTableFunctions mapFunctions = { NULL };
@implementation OFEpollKernelEventObserver
- (instancetype)init
{
self = [super init];
@try {
|
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
[self of_removeObject: object
fileDescriptor: object.fileDescriptorForWriting
events: EPOLLOUT];
[super removeObjectForWriting: object];
}
- (void)observeForTimeInterval: (of_time_interval_t)timeInterval
{
OFNull *nullObject = [OFNull null];
struct epoll_event eventList[EVENTLIST_SIZE];
int events;
if ([self of_processReadBuffers])
return;
|
|
|
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
[self of_removeObject: object
fileDescriptor: object.fileDescriptorForWriting
events: EPOLLOUT];
[super removeObjectForWriting: object];
}
- (void)observeForTimeInterval: (OFTimeInterval)timeInterval
{
OFNull *nullObject = [OFNull null];
struct epoll_event eventList[EVENTLIST_SIZE];
int events;
if ([self of_processReadBuffers])
return;
|
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
for (int i = 0; i < events; i++) {
if (eventList[i].events & EPOLLIN) {
void *pool = objc_autoreleasePoolPush();
if (eventList[i].data.ptr == nullObject) {
char buffer;
OF_ENSURE(read(_cancelFD[0], &buffer, 1) == 1);
continue;
}
if ([_delegate respondsToSelector:
@selector(objectIsReadyForReading:)])
[_delegate objectIsReadyForReading:
eventList[i].data.ptr];
|
|
|
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
for (int i = 0; i < events; i++) {
if (eventList[i].events & EPOLLIN) {
void *pool = objc_autoreleasePoolPush();
if (eventList[i].data.ptr == nullObject) {
char buffer;
OFEnsure(read(_cancelFD[0], &buffer, 1) == 1);
continue;
}
if ([_delegate respondsToSelector:
@selector(objectIsReadyForReading:)])
[_delegate objectIsReadyForReading:
eventList[i].data.ptr];
|