2

我正在尝试使用 FSEvents API(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);
4

0 回答 0