diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2012-05-03 01:03:08 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2012-05-03 02:49:36 +0200 |
commit | df2c5fa81dbc8c584a1e3f6310b89385bca097bb (patch) | |
tree | d0d30d0b4a84b855fa972a020986428360cd4b65 /lib | |
parent | 47d6a946562b7825579211b0d617aee32bdf6f74 (diff) | |
download | android-node-v8-df2c5fa81dbc8c584a1e3f6310b89385bca097bb.tar.gz android-node-v8-df2c5fa81dbc8c584a1e3f6310b89385bca097bb.tar.bz2 android-node-v8-df2c5fa81dbc8c584a1e3f6310b89385bca097bb.zip |
fs: fix file descriptor leak in sync functions
Fixes #3202. This is a back-port of commit 4e290e4.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/fs.js | 34 |
1 files changed, 19 insertions, 15 deletions
@@ -131,17 +131,19 @@ fs.readFileSync = function(path, encoding) { var nread = 0; var lastRead = 0; - do { - if (lastRead) { - buffer._bytesRead = lastRead; - nread += lastRead; - buffers.push(buffer); - } - var buffer = new Buffer(4048); - lastRead = fs.readSync(fd, buffer, 0, buffer.length, null); - } while (lastRead > 0); - - fs.closeSync(fd); + try { + do { + if (lastRead) { + buffer._bytesRead = lastRead; + nread += lastRead; + buffers.push(buffer); + } + var buffer = new Buffer(4048); + lastRead = fs.readSync(fd, buffer, 0, buffer.length, null); + } while (lastRead > 0); + } finally { + fs.closeSync(fd); + } if (buffers.length > 1) { var offset = 0; @@ -629,11 +631,13 @@ fs.writeFileSync = function(path, data, encoding) { } var written = 0; var length = data.length; - //writeSync(fd, buffer, offset, length, position) - while (written < length) { - written += fs.writeSync(fd, data, written, length - written, written); + try { + while (written < length) { + written += fs.writeSync(fd, data, written, length - written, written); + } + } finally { + fs.closeSync(fd); } - fs.closeSync(fd); }; |