Index: /trunk/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.cpp
===================================================================
--- /trunk/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.cpp	(revision 85748)
+++ /trunk/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.cpp	(revision 85749)
@@ -103,6 +103,6 @@
     int  clientConnect(uint32_t idClient, void *pvClient) RT_NOEXCEPT RT_OVERRIDE;
     int  clientDisconnect(uint32_t idClient, void *pvClient) RT_NOEXCEPT RT_OVERRIDE;
-    int  clientQueryFeatures(DragAndDropClient *pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT;
-    int  clientReportFeatures(DragAndDropClient *pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT;
+    int  clientQueryFeatures(uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT;
+    int  clientReportFeatures(DragAndDropClient *pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT;
     void guestCall(VBOXHGCMCALLHANDLE callHandle, uint32_t idClient, void *pvClient, uint32_t u32Function,
                    uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT RT_OVERRIDE;
@@ -307,11 +307,11 @@
  *
  * @param   pClient     The client state.
- * @param   hCall       The client's call handle.
  * @param   cParms      Number of parameters.
  * @param   paParms     Array of parameters.
  */
-int DragAndDropService::clientReportFeatures(DragAndDropClient *pClient,
-                                             VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT
-{
+int DragAndDropService::clientReportFeatures(DragAndDropClient *pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT
+{
+    RT_NOREF(pClient);
+
     /*
      * Validate the request.
@@ -325,20 +325,15 @@
 
     /*
-     * Do the work.
+     * Report back the host features.
      */
     paParms[0].u.uint64 = m_fHostFeatures0;
     paParms[1].u.uint64 = 0;
 
-    int rc = pClient->Complete(hCall, VINF_SUCCESS);
-    if (RT_SUCCESS(rc))
-    {
-        pClient->fGuestFeatures0 = fFeatures0;
-        pClient->fGuestFeatures1 = fFeatures1;
-        Log(("[Client %RU32] features: %#RX64 %#RX64\n", pClient->GetClientID(), fFeatures0, fFeatures1));
-    }
-    else
-        LogFunc(("pfnCallComplete -> %Rrc\n", rc));
-
-    return VINF_HGCM_ASYNC_EXECUTE;
+    pClient->fGuestFeatures0 = fFeatures0;
+    pClient->fGuestFeatures1 = fFeatures1;
+
+    Log(("[Client %RU32] features: %#RX64 %#RX64\n", pClient->GetClientID(), fFeatures0, fFeatures1));
+
+    return VINF_SUCCESS;
 }
 
@@ -350,11 +345,8 @@
  * @retval  VERR_WRONG_PARAMETER_COUNT
  *
- * @param   pClient     The client state.
- * @param   hCall       The client's call handle.
  * @param   cParms      Number of parameters.
  * @param   paParms     Array of parameters.
  */
-int DragAndDropService::clientQueryFeatures(DragAndDropClient *pClient,
-                                            VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT
+int DragAndDropService::clientQueryFeatures(uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT
 {
     /*
@@ -367,14 +359,10 @@
 
     /*
-     * Do the work.
+     * Report back the host features.
      */
     paParms[0].u.uint64 = m_fHostFeatures0;
     paParms[1].u.uint64 = 0;
 
-    int rc = pClient->Complete(hCall, VINF_SUCCESS);
-    if (RT_FAILURE(rc))
-        LogFunc(("pfnCallComplete -> %Rrc\n", rc));
-
-    return VINF_HGCM_ASYNC_EXECUTE;
+    return VINF_SUCCESS;
 }
 
@@ -638,5 +626,5 @@
             {
                 LogFlowFunc(("GUEST_DND_FN_REPORT_FEATURES\n"));
-                rc = clientReportFeatures(pClient, callHandle, cParms, paParms);
+                rc = clientReportFeatures(pClient, cParms, paParms);
                 if (RT_SUCCESS(rc))
                 {
@@ -657,5 +645,5 @@
             {
                 LogFlowFunc(("GUEST_DND_FN_QUERY_FEATURES"));
-                rc = clientQueryFeatures(pClient, callHandle, cParms, paParms);
+                rc = clientQueryFeatures(cParms, paParms);
                 break;
             }
@@ -1053,5 +1041,8 @@
     }
     else if (pClient)
+    {
+        /* Complete the call on the guest side. */
         pClient->Complete(callHandle, rc);
+    }
     else
     {
Index: /trunk/src/VBox/HostServices/common/client.cpp
===================================================================
--- /trunk/src/VBox/HostServices/common/client.cpp	(revision 85748)
+++ /trunk/src/VBox/HostServices/common/client.cpp	(revision 85749)
@@ -159,4 +159,10 @@
  * Set the client's status to deferred, meaning that it does not return to the caller
  * until CompleteDeferred() has been called.
+ *
+ * @returns VBox status code.
+ * @param   hHandle             Call handle to save.
+ * @param   u32Function         Function number to save.
+ * @param   cParms              Number of HGCM parameters to save.
+ * @param   paParms             HGCM parameters to save.
  */
 void Client::SetDeferred(VBOXHGCMCALLHANDLE hHandle, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) RT_NOEXCEPT
@@ -164,7 +170,4 @@
     LogFlowThisFunc(("uClient=%RU32\n", m_idClient));
 
-#ifndef DEBUG_bird /** r=bird: This bugger triggers in the DnD service when restoring saved state.  Not tested?  */
-    AssertMsg(m_fDeferred == false, ("Client already in deferred mode\n"));
-#endif
     m_fDeferred = true;
 
