API FSEvents пропускает файловые дескрипторы (KQUEUE)
Я пытаюсь отслеживать набор путей с помощью API FSEvents (OSX 10.9, ARC включен, "песочница"). Следующий код пропускает файловые дескрипторы. Используя lsof, я получаю много:
Project 70505 aaa 22u KQUEUE count=0, state=0x1
Через пару часов я достиг максимального предела открытых дескрипторов, и FSEventStreamCreate начал давать сбой.
Любая идея, почему он пропускает два файловых дескриптора каждый раз, когда я запускаю это?
FSEventStreamContext callbackInfo;
callbackInfo.version = 0;
callbackInfo.info = NULL;
callbackInfo.retain = NULL;
callbackInfo.release = NULL;
callbackInfo.copyDescription = NULL;
// ===== +2 descriptors ======
FSEventStreamRef ev = FSEventStreamCreate(NULL,
NULL,
&callbackInfo,
((__bridge CFArrayRef)[NSArray arrayWithObject:@"/Users/aaa/Downloads"]),
kFSEventStreamEventIdSinceNow,
0,
kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot);
// ===== +2 descriptors ======
FSEventStreamScheduleWithRunLoop(ev, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
FSEventStreamStart(ev);
FSEventStreamStop(ev);
FSEventStreamUnscheduleFromRunLoop(ev, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
// ===== -1 descriptor ======
FSEventStreamInvalidate(ev);
FSEventStreamRelease(ev);