Browse Source

Add several asserts to tcp_wrap

OnAlloc and OnConnection should not be occurring after uv_close was
called on the handle.
v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
0df2f74d36
  1. 20
      src/tcp_wrap.cc

20
src/tcp_wrap.cc

@ -206,9 +206,13 @@ class TCPWrap {
HandleScope scope;
TCPWrap* wrap = static_cast<TCPWrap*>(handle->data);
assert(&wrap->handle_ == (uv_tcp_t*)handle);
// We should not be getting this callback if someone as already called
// uv_close() on the handle. Since we've destroyed object_ at the same
// time as calling uv_close() we can test for this here.
assert(wrap->object_.IsEmpty() == false);
if (status != 0) {
// TODO Handle server error (call onerror?)
assert(0);
@ -315,6 +319,11 @@ class TCPWrap {
TCPWrap* wrap = static_cast<TCPWrap*>(handle->data);
// We should not be getting this callback if someone as already called
// uv_close() on the handle. Since we've destroyed object_ at the same
// time as calling uv_close() we can test for this here.
assert(wrap->object_.IsEmpty() == false);
// Remove the reference to the slab to avoid memory leaks;
Local<Value> slab_v = wrap->object_->GetHiddenValue(slab_sym);
wrap->object_->SetHiddenValue(slab_sym, v8::Null());
@ -370,6 +379,9 @@ class TCPWrap {
HandleScope scope;
// The request object should still be there.
assert(req_wrap->object_.IsEmpty() == false);
if (status) {
SetErrno(uv_last_error().code);
}
@ -439,6 +451,9 @@ class TCPWrap {
HandleScope scope;
// The request object should still be there.
assert(req_wrap->object_.IsEmpty() == false);
if (status) {
SetErrno(uv_last_error().code);
}
@ -512,6 +527,9 @@ class TCPWrap {
ReqWrap* req_wrap = (ReqWrap*) req->data;
TCPWrap* wrap = (TCPWrap*) req->handle->data;
// The request object should still be there.
assert(req_wrap->object_.IsEmpty() == false);
HandleScope scope;
if (status) {

Loading…
Cancel
Save