Fix overlapping reconnect loops

Change-Id: I23f5c17700f9ac17baf9c8136739bf32d656bbf0
diff --git a/chameleon/grpc_client/grpc_client.py b/chameleon/grpc_client/grpc_client.py
index 72c8e47..e9ce5c6 100644
--- a/chameleon/grpc_client/grpc_client.py
+++ b/chameleon/grpc_client/grpc_client.py
@@ -59,10 +59,12 @@
         self.retries = 0
         self.on_reconnect = None
         self.shutting_down = False
+        self.connected = False
 
     def run(self, on_reconnect=None):
         self.on_reconnect = on_reconnect
-        reactor.callLater(0, self.connect)
+        if not self.connected:
+            reactor.callLater(0, self.connect)
         return self
 
     def shutdown(self):
@@ -77,7 +79,7 @@
         (Re-)Connect to end-point
         """
 
-        if self.shutting_down:
+        if self.shutting_down or self.connected:
             return
 
         try:
@@ -93,6 +95,7 @@
             self._compile_proto_files()
             self._clear_backoff()
 
+            self.connected = True
             if self.on_reconnect is not None:
                 reactor.callLater(0, self.on_reconnect)
 
@@ -236,7 +239,7 @@
         :return: The response protobuf message
         """
 
-        if self.channel is None:
+        if not self.connected:
             raise ServiceUnavailable()
 
         try:
@@ -249,7 +252,8 @@
             else:
                 log.exception(e)
 
-            self.channel = None
-            reactor.callLater(0, self.connect)
+            if self.connected :
+                self.connected = False
+                reactor.callLater(0, self.connect)
 
             raise e