diff --git a/lib/native/index.js b/lib/native/index.js index 423bbd38..bf2aa0f8 100644 --- a/lib/native/index.js +++ b/lib/native/index.js @@ -30,7 +30,6 @@ p.connect = function(cb) { if(err) { return cb ? cb(err) : self.emit('error', err); } - nativeConnect.call(self, conString); if(cb) { var errCallback; var connectCallback = function() { @@ -46,6 +45,7 @@ p.connect = function(cb) { self.once('connect', connectCallback); self.once('error', errCallback); } + nativeConnect.call(self, conString); }) } diff --git a/src/binding.cc b/src/binding.cc index 5253181b..f2ceefc4 100644 --- a/src/binding.cc +++ b/src/binding.cc @@ -234,18 +234,17 @@ public: uv_poll_t read_watcher_; uv_poll_t write_watcher_; - PGconn *connection_; bool connecting_; + bool ioInitialized_; Connection () : ObjectWrap () { connection_ = NULL; connecting_ = false; + ioInitialized_ = false; TRACE("Initializing ev watchers"); - //ev_init(&read_watcher_, io_event); read_watcher_.data = this; - //ev_init(&write_watcher_, io_event); write_watcher_.data = this; } @@ -308,7 +307,7 @@ protected: { if(PQflush(connection_) == 1) { TRACE("Flushing"); - //ev_io_start(EV_DEFAULT_ &write_watcher_); + uv_poll_start(&write_watcher_, UV_WRITABLE, io_event); } } @@ -331,15 +330,14 @@ protected: LOG("Connection couldn't be created"); } - if (PQsetnonblocking(connection_, 1) == -1) { - LOG("Unable to set connection to non-blocking"); - return false; - } - ConnStatusType status = PQstatus(connection_); if(CONNECTION_BAD == status) { - LOG("Bad connection status"); + return false; + } + + if (PQsetnonblocking(connection_, 1) == -1) { + LOG("Unable to set connection to non-blocking"); return false; } @@ -353,13 +351,11 @@ protected: PQsetNoticeProcessor(connection_, NoticeReceiver, this); + TRACE("Setting watchers to socket"); uv_poll_init(uv_default_loop(), &read_watcher_, fd); uv_poll_init(uv_default_loop(), &write_watcher_, fd); - TRACE("Setting watchers to socket"); - //uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) - //ev_io_set(&read_watcher_, fd, EV_READ); - //ev_io_set(&write_watcher_, fd, EV_WRITE); + ioInitialized_ = true; connecting_ = true; StartWrite(); @@ -399,7 +395,7 @@ protected: TRACE("revents & EV_READ"); if(PQconsumeInput(connection_) == 0) { End(); - EmitLastError(); + EmitLastError(); LOG("Something happened, consume input is 0"); return; } @@ -623,28 +619,28 @@ private: void StopWrite() { TRACE("Stoping write watcher"); - //ev_io_stop(EV_DEFAULT_ &write_watcher_); - uv_poll_stop(&write_watcher_); + if(ioInitialized_) { + uv_poll_stop(&write_watcher_); + } } void StartWrite() { TRACE("Starting write watcher"); uv_poll_start(&write_watcher_, UV_WRITABLE, io_event); - //ev_io_start(EV_DEFAULT_ &write_watcher_); } void StopRead() { TRACE("Stoping read watcher"); - //ev_io_stop(EV_DEFAULT_ &read_watcher_); - uv_poll_stop(&read_watcher_); + if(ioInitialized_) { + uv_poll_stop(&read_watcher_); + } } void StartRead() { TRACE("Starting read watcher"); - //ev_io_start(EV_DEFAULT_ &read_watcher_); uv_poll_start(&read_watcher_, UV_READABLE, io_event); } //Converts a v8 array to an array of cstrings diff --git a/test/integration/client/error-handling-tests.js b/test/integration/client/error-handling-tests.js index ab6ed99b..a02982ad 100644 --- a/test/integration/client/error-handling-tests.js +++ b/test/integration/client/error-handling-tests.js @@ -80,7 +80,6 @@ test('error handling', function(){ }); test('non-query error', function() { - return false; var client = new Client({ user:'asldkfjsadlfkj' @@ -90,7 +89,6 @@ test('error handling', function(){ }); test('non-query error with callback', function() { - return false; var client = new Client({ user:'asldkfjsadlfkj' }); @@ -117,7 +115,6 @@ test('non-error calls supplied callback', function() { }); test('when connecting to invalid host', function() { - return false; var client = new Client({ user: 'brian', password: '1234', @@ -128,7 +125,6 @@ test('when connecting to invalid host', function() { }); test('when connecting to invalid host with callback', function() { - return false; var client = new Client({ user: 'brian', password: '1234',