Skip to content

Commit 113a6ec

Browse files
Fix file descriptor leak in DirectoryWatcher (#1104)
- `DirectoryWatcher` opens file descriptors for monitoring directories but never closes them, causing a file descriptor leak. - Adds `setCancelHandler` to properly close file descriptors when the `DispatchSource` is cancelled. Signed-off-by: Ronit Sabhaya <ronitsabhaya75@gmail.com>
1 parent 72f04b6 commit 113a6ec

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

Sources/Helpers/APIServer/DirectoryWatcher.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,18 @@ public class DirectoryWatcher {
4848

4949
let descriptor = open(directoryURL.path, O_EVTONLY)
5050

51-
source = DispatchSource.makeFileSystemObjectSource(
51+
let dispatchSource = DispatchSource.makeFileSystemObjectSource(
5252
fileDescriptor: descriptor,
5353
eventMask: .write,
5454
queue: monitorQueue
5555
)
5656

57-
source?.setEventHandler { [weak self] in
57+
// Close the file descriptor when the source is cancelled
58+
dispatchSource.setCancelHandler {
59+
close(descriptor)
60+
}
61+
62+
dispatchSource.setEventHandler { [weak self] in
5863
guard let self else { return }
5964

6065
do {
@@ -65,7 +70,8 @@ public class DirectoryWatcher {
6570
}
6671
}
6772

68-
source?.resume()
73+
source = dispatchSource
74+
dispatchSource.resume()
6975
}
7076

7177
deinit {

0 commit comments

Comments
 (0)