Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/webtorrent/webtorrent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFeross Aboukhadijeh <feross@feross.org>2015-05-17 10:05:00 +0300
committerFeross Aboukhadijeh <feross@feross.org>2015-05-17 10:05:00 +0300
commitf862e1c5975f2440657f9b35254a763dc1c039e9 (patch)
tree24c946e9bd389e99e001d36b9ae645c079a440d0 /lib
parent659ea7d3303f0259d963e954246aaf0d8aeb68a7 (diff)
fix regression: only return file data when it's done
Diffstat (limited to 'lib')
-rw-r--r--lib/storage.js56
1 files changed, 35 insertions, 21 deletions
diff --git a/lib/storage.js b/lib/storage.js
index 30fe9a9..f4832f0 100644
--- a/lib/storage.js
+++ b/lib/storage.js
@@ -283,10 +283,22 @@ File.prototype.getBlobURL = function (cb) {
return cb(new Error('file.blobURL requires window.URL and window.Blob support'))
}
- // Use the existing in-memory buffer for better memory utilization and one less copy.
- var buffer = self.storage.buffer.slice(self.offset, self.offset + self.length)
- var url = window.URL.createObjectURL(new window.Blob([ buffer ]))
- cb(null, url)
+ function onBuffer (err, buffer) {
+ if (err) return cb(err)
+ var url = window.URL.createObjectURL(new window.Blob([ buffer ]))
+ cb(null, url)
+ }
+
+ if (self.storage.buffer) {
+ // Use the in-memory buffer (when possible) for better memory utilization
+ var onDone = function () {
+ onBuffer(null, self.storage.buffer.slice(self.offset, self.offset + self.length))
+ }
+ if (self.done) onDone()
+ else self.once('done', onDone)
+ } else {
+ self.getBuffer(onBuffer)
+ }
}
/**
@@ -296,26 +308,28 @@ File.prototype.getBuffer = function (cb) {
var self = this
cb = dezalgo(once(cb))
- // Use the in-memory buffer (when possible) for better memory utilization and one less
- // copy.
var buffer
if (self.storage.buffer) {
- buffer = self.storage.buffer.slice(self.offset, self.offset + self.length)
- cb(null, buffer)
- return
- }
-
- buffer = new Buffer(self.length)
- var start = 0
- self.createReadStream()
- .on('data', function (chunk) {
- chunk.copy(buffer, start)
- start += chunk.length
- })
- .on('end', function () {
+ // Use the in-memory buffer (when possible) for better memory utilization
+ var onDone = function () {
+ buffer = self.storage.buffer.slice(self.offset, self.offset + self.length)
cb(null, buffer)
- })
- .on('error', cb)
+ }
+ if (self.done) onDone()
+ else self.once('done', onDone)
+ } else {
+ buffer = new Buffer(self.length)
+ var start = 0
+ self.createReadStream()
+ .on('data', function (chunk) {
+ chunk.copy(buffer, start)
+ start += chunk.length
+ })
+ .on('end', function () {
+ cb(null, buffer)
+ })
+ .on('error', cb)
+ }
}
File.prototype._checkDone = function () {