Add several asserts to tcp_wrap
authorRyan Dahl <ry@tinyclouds.org>
Wed, 6 Jul 2011 21:02:55 +0000 (14:02 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Fri, 8 Jul 2011 22:22:40 +0000 (15:22 -0700)
OnAlloc and OnConnection should not be occurring after uv_close was
called on the handle.

src/tcp_wrap.cc

index 125b880..50b584a 100644 (file)
@@ -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) {