aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2012-05-03 01:03:08 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2012-05-03 02:49:36 +0200
commitdf2c5fa81dbc8c584a1e3f6310b89385bca097bb (patch)
treed0d30d0b4a84b855fa972a020986428360cd4b65 /lib
parent47d6a946562b7825579211b0d617aee32bdf6f74 (diff)
downloadandroid-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.js34
1 files changed, 19 insertions, 15 deletions
diff --git a/lib/fs.js b/lib/fs.js
index 09fbca83fa..5b04e97572 100644
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -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);
};