Skip to content

Commit 5c421e8

Browse files
committed
Don't panic if a write doesn't fully complete
1 parent 34465ea commit 5c421e8

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

index.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ class Speaker extends Writable {
169169
// close() has already been called. this should not be called
170170
return done(new Error('write() call after close() call'))
171171
}
172-
let b
173172
let left = chunk
174173
let handle = this.audio_handle
175174
if (!handle) {
@@ -187,13 +186,12 @@ class Speaker extends Writable {
187186
debug('aborting remainder of write() call (%o bytes), since speaker is `_closed`', left.length)
188187
return done()
189188
}
190-
b = left
189+
let b = left
190+
if (b.length === 0) {
191+
return done()
192+
}
191193
if (b.length > chunkSize) {
192-
const t = b
193-
b = t.slice(0, chunkSize)
194-
left = t.slice(chunkSize)
195-
} else {
196-
left = null
194+
b = b.slice(0, chunkSize)
197195
}
198196
debug('writing %o byte chunk', b.length)
199197
binding.write(handle, b).then(onwrite, onerror)
@@ -205,9 +203,10 @@ class Speaker extends Writable {
205203

206204
const onwrite = (r) => {
207205
debug('wrote %o bytes', r)
208-
if (r !== b.length) {
206+
if (r <= 0) {
209207
done(new Error(`write() failed: ${r}`))
210-
} else if (left) {
208+
} else if (r < left.length) {
209+
left = left.slice(r)
211210
debug('still %o bytes left in this chunk', left.length)
212211
write()
213212
} else {

0 commit comments

Comments
 (0)