это убивает меня, и я не уверен, что знаю, как подойти к его отладке.
Я использую API-интерфейс Mac FSEvents для мониторинга заданной папки в файловой системе.Однако иногда некоторые папки перестают отправлять какие-либо события уведомления.До сих пор это происходило только для папок внутри ~ / Dropbox и затрагивало лишь нескольких пользователей моего приложения (и также регулярно меня затрагивало).
Сумасшедшая часть в том, что путь к «излечению»'файловая система должна сделать:
mv ~/Dropbox/some/stuck/folder ~/Dropbox/some/stuck/folder.0
mkdir ~/Dropbox/some/stuck/folder
mv ~/Dropbox/some/stuck/folder.0/* ~/Dropbox/some/stuck/folder/
rmdir ~/Dropbox/some/stuck/folder.0
После выполнения этих команд папка отклеивается и начинает отправлять события!Требуется несколько попыток, чтобы определить, какая из родительских папок является виновником, но это всегда какая-то папка внутри Dropbox.(Выход из Dropbox или перезагрузка не излечивает его.)
Я не делаю ничего особенного в своем коде.Мониторинг запускается с использованием:
FSEventStreamContext context;
context.version = 0;
context.info = self;
context.retain = NULL;
context.release = NULL;
context.copyDescription = NULL;
_streamRef = FSEventStreamCreate(nil,
(FSEventStreamCallback)FSMonitorEventStreamCallback,
&context,
(CFArrayRef)paths,
kFSEventStreamEventIdSinceNow,
0.25,
kFSEventStreamCreateFlagUseCFTypes);
if (!_streamRef) {
NSLog(@"Failed to start monitoring of %@ (FSEventStreamCreate error)", _path);
}
FSEventStreamScheduleWithRunLoop(_streamRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
if (!FSEventStreamStart(_streamRef)) {
NSLog(@"Failed to start monitoring of %@ (FSEventStreamStart error)", _path);
}
, и обратный вызов выглядит следующим образом (не то чтобы это имеет значение):
static void FSMonitorEventStreamCallback(ConstFSEventStreamRef streamRef, FSMonitor *monitor, size_t numEvents, NSArray *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
for (int i = 0; i < numEvents; i++) {
NSString *path = [eventPaths objectAtIndex:i];
FSEventStreamEventFlags flags = eventFlags[i];
[monitor sendChangeEventWithPath:path flags:flags];
}
}
Бывает как на 10,6, так и на 10,7.Никакие изворотливые вещи, такие как FileVault, не активны.
Мне это кажется ошибкой ОС, но я не нашел упоминаний об этой проблеме в Интернете.
Вопросы:
1) Вы когда-нибудь испытывали что-то подобное?Есть ли какие-либо результаты?
2) Какие шаги были бы предприняты для дальнейшей диагностики этого, прежде чем использовать инцидент технической поддержки?