[Spice-devel] [PATCH 5/5] Avoid to use _singleton for VDService

Frediano Ziglio fziglio at redhat.com
Fri Aug 12 11:02:09 UTC 2016


Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 vdservice/vdservice.cpp | 32 +++++++++-----------------------
 1 file changed, 9 insertions(+), 23 deletions(-)

diff --git a/vdservice/vdservice.cpp b/vdservice/vdservice.cpp
index ef1ed9f..d2bedaa 100644
--- a/vdservice/vdservice.cpp
+++ b/vdservice/vdservice.cpp
@@ -59,14 +59,13 @@ typedef std::queue<int> VDControlQueue;
 
 class VDService {
 public:
-    static VDService* get();
-    ~VDService();
-    bool run();
-    bool install();
-    bool uninstall();
+    static bool run();
+    static bool install();
+    static bool uninstall();
 
 private:
     VDService();
+    ~VDService();
     bool execute();
     void stop();
     static DWORD WINAPI control_handler(DWORD control, DWORD event_type,
@@ -87,7 +86,6 @@ private:
         }
     }
 private:
-    static VDService* _singleton;
     SERVICE_STATUS _status;
     SERVICE_STATUS_HANDLE _status_handle;
     PROCESS_INFORMATION _agent_proc_info;
@@ -109,16 +107,6 @@ private:
     unsigned _events_count;
 };
 
-VDService* VDService::_singleton = NULL;
-
-VDService* VDService::get()
-{
-    if (!_singleton) {
-        _singleton = new VDService();
-    }
-    return (VDService*)_singleton;
-}
-
 VDService::VDService()
     : _status_handle (0)
     , _events (NULL)
@@ -138,7 +126,6 @@ VDService::VDService()
     _agent_path[0] = wchar_t('\0');
     MUTEX_INIT(_agent_mutex);
     MUTEX_INIT(_control_mutex);
-    _singleton = this;
 }
 
 VDService::~VDService()
@@ -322,7 +309,7 @@ DWORD WINAPI VDService::control_handler(DWORD control, DWORD event_type, LPVOID
 
 VOID WINAPI VDService::main(DWORD argc, TCHAR* argv[])
 {
-    VDService* s = _singleton;
+    VDService* s = new VDService;
     SERVICE_STATUS* status;
     TCHAR log_path[MAX_PATH];
     TCHAR full_path[MAX_PATH];
@@ -382,6 +369,7 @@ VOID WINAPI VDService::main(DWORD argc, TCHAR* argv[])
     SetServiceStatus(s->_status_handle, status);
 #endif //DEBUG_VDSERVICE
     vd_printf("***Service stopped***");
+    delete s;
 }
 
 bool VDService::execute()
@@ -839,18 +827,16 @@ int _tmain(int argc, TCHAR* argv[])
         printf("vdservice is not supported in this system version\n");
         return -1;
     }
-    VDService* vdservice = VDService::get();
     if (argc > 1) {
         if (lstrcmpi(argv[1], TEXT("install")) == 0) {
-            success = vdservice->install();
+            success = VDService::install();
         } else if (lstrcmpi(argv[1], TEXT("uninstall")) == 0) {
-            success = vdservice->uninstall();
+            success = VDService::uninstall();
         } else {
             printf("Use: vdservice install / uninstall\n");
         }
     } else {
-        success = vdservice->run();
+        success = VDService::run();
     }
-    delete vdservice;
     return (success ? 0 : -1);
 }
-- 
2.7.4



More information about the Spice-devel mailing list