Index: /trunk/src/VBox/HostServices/GuestControl/service.cpp
===================================================================
--- /trunk/src/VBox/HostServices/GuestControl/service.cpp	(revision 76954)
+++ /trunk/src/VBox/HostServices/GuestControl/service.cpp	(revision 76955)
@@ -973,19 +973,13 @@
      */
     ClientState *pClient;
-    //try - can't currently throw anything.
+    try
     {
         pClient = new (pvClient) ClientState(pThis->mpHelpers, idClient);
-    }
-    //catch (std::bad_alloc &)
-    //{
-    //    return VERR_NO_MEMORY;
-    //}
-    try
-    {
         pThis->m_ClientStateMap[idClient] = pClient;
     }
     catch (std::bad_alloc &)
     {
-        pClient->~ClientState();
+        if (pClient)
+            pClient->~ClientState();
         return VERR_NO_MEMORY;
     }
@@ -2135,19 +2129,5 @@
     {
         VBOXGUESTCTRLHOSTCALLBACK data(cParms, paParms);
-        /** @todo Not sure if this try/catch is necessary, I pushed it down here from
-         * GstCtrlService::call where it was not needed for anything else that I
-         * could spot.  I know this might be a tough, but I expect someone writing
-         * this kind of code to know what can throw errors and handle them where it
-         * is appropriate, rather than grand catch-all-at-the-top crap like this.
-         * The reason why it is utter crap, is that you have no state cleanup code
-         * where you might need it, which is why I despise exceptions in general */
-        try
-        {
-            rc = mpfnHostCallback(mpvHostData, idFunction, &data, sizeof(data));
-        }
-        catch (std::bad_alloc &)
-        {
-            rc = VERR_NO_MEMORY;
-        }
+        rc = mpfnHostCallback(mpvHostData, idFunction, &data, sizeof(data));
     }
     else
