void EIO_AfterWatchPort(uv_work_t* req) { Nan::HandleScope scope; WatchPortBaton* data = static_cast<WatchPortBaton*>(req->data); if (data->disconnected) { data->disconnectedCallback->Call(0, NULL); DisposeWatchPortCallbacks(data); goto cleanup; } bool skipCleanup = false; if (data->bytesRead > 0) { v8::Local<v8::Value> argv[1]; argv[0] = Nan::NewBuffer(data->buffer, data->bytesRead, FinalizerCallback, req).ToLocalChecked(); skipCleanup = true; data->dataCallback->Call(1, argv); } else if (data->errorCode > 0) { if (data->errorCode == ERROR_INVALID_HANDLE && IsClosingHandle((int)data->fd)) { DisposeWatchPortCallbacks(data); goto cleanup; } else { v8::Local<v8::Value> argv[1]; argv[0] = Nan::Error(data->errorString); data->errorCallback->Call(1, argv); Sleep(100); // prevent the errors from occurring too fast } } AfterOpenSuccess((int)data->fd, data->dataCallback, data->disconnectedCallback, data->errorCallback); cleanup: if (!skipCleanup) { delete data; delete req; } }
void EIO_AfterWatchPort(uv_work_t* req) { NanScope(); WatchPortBaton* data = static_cast<WatchPortBaton*>(req->data); if(data->disconnected) { data->disconnectedCallback->Call(0, NULL); DisposeWatchPortCallbacks(data); goto cleanup; } if(data->bytesRead > 0) { v8::Handle<v8::Value> argv[1]; argv[0] = NanNewBufferHandle(data->buffer, data->bytesRead); data->dataCallback->Call(1, argv); } else if(data->errorCode > 0) { if(data->errorCode == ERROR_INVALID_HANDLE && IsClosingHandle((int)data->fd)) { DisposeWatchPortCallbacks(data); goto cleanup; } else { v8::Handle<v8::Value> argv[1]; argv[0] = v8::Exception::Error(v8::String::New(data->errorString)); data->errorCallback->Call(1, argv); Sleep(100); // prevent the errors from occurring too fast } } AfterOpenSuccess((int)data->fd, data->dataCallback, data->disconnectedCallback, data->errorCallback); cleanup: delete data; delete req; }