Skip to content

Commit ffe2441

Browse files
committed
Merge pull request #102 from johnno1962/master
Always close file descriptor (eventually runs out of them)
2 parents bf53cd8 + b03e66f commit ffe2441

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

Foundation/NSData.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,10 @@ extension NSData {
215215
if fd < 0 {
216216
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
217217
}
218-
218+
defer {
219+
close(fd)
220+
}
221+
219222
var info = stat()
220223
let ret = withUnsafeMutablePointer(&info) { infoPointer -> Bool in
221224
if fstat(fd, infoPointer) < 0 {
@@ -225,7 +228,6 @@ extension NSData {
225228
}
226229

227230
if !ret {
228-
close(fd)
229231
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
230232
}
231233

@@ -236,7 +238,6 @@ extension NSData {
236238

237239
// Swift does not currently expose MAP_FAILURE
238240
if data != UnsafeMutablePointer<Void>(bitPattern: -1) {
239-
close(fd)
240241
return NSDataReadResult(bytes: data, length: length) { buffer, length in
241242
munmap(data, length)
242243
}
@@ -255,8 +256,8 @@ extension NSData {
255256
remaining -= amt
256257
total += amt
257258
}
259+
258260
if remaining != 0 {
259-
close(fd)
260261
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: nil)
261262
}
262263

0 commit comments

Comments
 (0)