From 4ff741a1458871afad993357fe4d1677c7547d88 Mon Sep 17 00:00:00 2001
From: davebshow <davebshow@gmail.com>
Date: Tue, 12 May 2015 18:42:46 -0400
Subject: [PATCH] profiling

---
 aiogremlin/__init__.py    |  2 +-
 aiogremlin/client.py      | 10 ++++++----
 aiogremlin/connection.py  | 12 ++++++++++--
 aiogremlin/protocol.py    | 12 +++++-------
 profile.py => profiler.py |  0
 5 files changed, 22 insertions(+), 14 deletions(-)
 rename profile.py => profiler.py (100%)

diff --git a/aiogremlin/__init__.py b/aiogremlin/__init__.py
index 123064e..890bba0 100644
--- a/aiogremlin/__init__.py
+++ b/aiogremlin/__init__.py
@@ -3,4 +3,4 @@ from .connection import (WebsocketPool, AiohttpFactory, BaseFactory,
     BaseConnection)
 from .client import GremlinClient, create_client
 from .exceptions import RequestError, GremlinServerError, SocketClientError
-__version__ = "0.0.3"
+__version__ = "0.0.3dev"
diff --git a/aiogremlin/client.py b/aiogremlin/client.py
index fa5f03b..1ff129a 100644
--- a/aiogremlin/client.py
+++ b/aiogremlin/client.py
@@ -155,18 +155,20 @@ class GremlinResponseStream:
 
     @asyncio.coroutine
     def _read(self):
+        # This will find the eof set at 200 response
+        if self._queue.at_eof():
+            self._conn.feed_pool()
+            return
         message = asyncio.async(self._queue.read(), loop=self._loop)
         done, pending = yield from asyncio.wait(
             [message, asyncio.async(self._conn._receive(), loop=self._loop)],
             loop=self._loop, return_when=asyncio.FIRST_COMPLETED)
         if message in done:
+            # Temporary
             try:
                 return message.result()
-            except aiohttp.streams.EofStream:
+            except aiohttp.EofStream:
                 self._conn.feed_pool()
-            except Exception:
-                self._conn.feed_pool()
-                raise
         else:
             message.cancel()
 
diff --git a/aiogremlin/connection.py b/aiogremlin/connection.py
index aa62588..7652d14 100644
--- a/aiogremlin/connection.py
+++ b/aiogremlin/connection.py
@@ -230,9 +230,17 @@ class AiohttpConnection(BaseConnection):
             yield from self.release()
             raise
         if message.tp == aiohttp.MsgType.binary:
-            self.parser.feed_data(message.data.decode())
+            try:
+                self.parser.feed_data(message.data.decode())
+            except Exception:
+                self.release()
+                raise
         elif message.tp == aiohttp.MsgType.text:
-            self.parser.feed_data(message.data.strip())
+            try:
+                self.parser.feed_data(message.data.strip())
+            except Exception:
+                self.release()
+                raise
         else:
             try:
                 if message.tp == aiohttp.MsgType.close:
diff --git a/aiogremlin/protocol.py b/aiogremlin/protocol.py
index 621a37f..6f40cba 100644
--- a/aiogremlin/protocol.py
+++ b/aiogremlin/protocol.py
@@ -23,15 +23,13 @@ def gremlin_response_parser(out, buf):
         if message.status_code == 200:
             out.feed_data(message)
         elif message.status_code == 299:
+            out.feed_data(message)
             out.feed_eof()
         else:
-            try:
-                if message.status_code < 500:
-                    raise RequestError(message.status_code, message.message)
-                else:
-                    raise GremlinServerError(message.status_code, message.message)
-            finally:
-                yield from connection.release()
+            if message.status_code < 500:
+                raise RequestError(message.status_code, message.message)
+            else:
+                raise GremlinServerError(message.status_code, message.message)
 
 
 class GremlinWriter:
diff --git a/profile.py b/profiler.py
similarity index 100%
rename from profile.py
rename to profiler.py
-- 
GitLab