Как правильно освободить семафор?
Шаги для воспроизведения сбоя:
если вызывается semaphore.wait(), а затем деинициализируется контроллер представления, которому он принадлежит, перед вызовом semaphore.signal, приложение аварийно завершает работу.
Получение ошибки ниже при dinit класса:
EXC_BAD_INSTRUCTION with the message "BUG IN CLIENT OF LIBDISPATCH: Semaphore object deallocated while in use"
Использовал:
let semaphore = DispatchSemaphore(value: 1)
Но странное добавление нижеприведенного кода в deinit устраняет проблему сбоя, не знаю почему.
while (semaphore.signal() != 0) {}
Так есть ли правильное решение?