diff --git a/Sources/Helpers/APIServer/DirectoryWatcher.swift b/Sources/Helpers/APIServer/DirectoryWatcher.swift index 143bc4cd..31693221 100644 --- a/Sources/Helpers/APIServer/DirectoryWatcher.swift +++ b/Sources/Helpers/APIServer/DirectoryWatcher.swift @@ -48,13 +48,18 @@ public class DirectoryWatcher { let descriptor = open(directoryURL.path, O_EVTONLY) - source = DispatchSource.makeFileSystemObjectSource( + let dispatchSource = DispatchSource.makeFileSystemObjectSource( fileDescriptor: descriptor, eventMask: .write, queue: monitorQueue ) - source?.setEventHandler { [weak self] in + // Close the file descriptor when the source is cancelled + dispatchSource.setCancelHandler { + close(descriptor) + } + + dispatchSource.setEventHandler { [weak self] in guard let self else { return } do { @@ -65,7 +70,8 @@ public class DirectoryWatcher { } } - source?.resume() + source = dispatchSource + dispatchSource.resume() } deinit {