tls_wrap: fix this incredibly stupid leak
Always call `Done` on the WriteWrap, and ensure that `EncOut` will consume all data in clear_in_ and invoke queued callbacks. Fix: https://github.com/iojs/io.js/issues/1075 PR-URL: https://github.com/iojs/io.js/pull/1244 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
e74b5d278c
commit
2ccc8f3970
@ -90,8 +90,7 @@ TLSWrap::~TLSWrap() {
|
||||
MakePending();
|
||||
|
||||
// And destroy
|
||||
while (WriteItem* wi = pending_write_items_.PopFront())
|
||||
delete wi;
|
||||
InvokeQueued(UV_ECANCELED);
|
||||
|
||||
ClearError();
|
||||
}
|
||||
@ -310,10 +309,12 @@ void TLSWrap::EncOut() {
|
||||
write_req->Dispatched();
|
||||
|
||||
// Ignore errors, this should be already handled in js
|
||||
if (err)
|
||||
if (err) {
|
||||
write_req->Dispose();
|
||||
else
|
||||
InvokeQueued(err);
|
||||
} else {
|
||||
NODE_COUNT_NET_BYTES_SENT(write_size_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -335,6 +336,9 @@ void TLSWrap::EncOutCb(WriteWrap* req_wrap, int status) {
|
||||
// Commit
|
||||
NodeBIO::FromBIO(wrap->enc_out_)->Read(nullptr, wrap->write_size_);
|
||||
|
||||
// Ensure that the progress will be made and `InvokeQueued` will be called.
|
||||
wrap->ClearIn();
|
||||
|
||||
// Try writing more data
|
||||
wrap->write_size_ = 0;
|
||||
wrap->EncOut();
|
||||
|
Loading…
x
Reference in New Issue
Block a user