From d9b83cf9c4ef6b05db911a2009c771f325273309 Mon Sep 17 00:00:00 2001
From: Thibault VINCENT <thibault.vincent@smartjog.com>
Date: Thu, 12 May 2011 15:50:43 +0200
Subject: [PATCH] fix: scheduler timer locking, tried to correct problems after
 successive reconnections

---
 ccnode/ccnode.py | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/ccnode/ccnode.py b/ccnode/ccnode.py
index b0b798e..d1f8c5a 100644
--- a/ccnode/ccnode.py
+++ b/ccnode/ccnode.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from threading import Timer, Lock
+from threading import Timer, Lock, Event
 from time import sleep
 from sjrpc.client import SimpleRpcClient
 from sjrpc.utils import ConnectionProxy
@@ -18,6 +18,7 @@ class CCNode(object):
         '''
         self._scheduler_timer = None
         self._scheduler_mutex = Lock()
+        self._scheduler_stopped = Event()
         self._handler = handlers.NodeHandler(self, hypervisor, exec_cmd,
                                                                     force_xen)
         self._manager = SimpleRpcClient.from_addr(server, port, enable_ssl=True,
@@ -27,7 +28,12 @@ class CCNode(object):
     def run(self):
         '''
         '''
-        self._manager.run()
+        try:
+            self._manager.run()
+        except:
+            pass # FIXME
+        finally:
+            self._scheduler_stopped.set()
     
     def authentify(self, login, password):
         '''
@@ -62,9 +68,10 @@ class CCNode(object):
         '''
         '''
         with self._scheduler_mutex:
-            self._handler.scheduler_run()
-            sleep(0.1)
-            self._scheduler_rearm()
+            if not self._scheduler_stopped.is_set():
+                self._handler.scheduler_run()
+                sleep(0.1)
+                self._scheduler_rearm()
     
     def get_server(self):
         '''
-- 
GitLab