Changeset 91100 in vbox for trunk/src/VBox/Main/src-client
- Timestamp:
- Sep 2, 2021 9:01:51 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/src-client/HGCM.cpp
r91097 r91100 149 149 150 150 static DECLCALLBACK(int) svcHlpCallComplete(VBOXHGCMCALLHANDLE callHandle, int32_t rc); 151 static DECLCALLBACK(int) svcHlpDisconnectClient(void *pvInstance, uint32_t u32ClientId);151 static DECLCALLBACK(int) svcHlpDisconnectClient(void *pvInstance, uint32_t idClient); 152 152 static DECLCALLBACK(bool) svcHlpIsCallRestored(VBOXHGCMCALLHANDLE callHandle); 153 153 static DECLCALLBACK(bool) svcHlpIsCallCancelled(VBOXHGCMCALLHANDLE callHandle); … … 927 927 * @interface_method_impl{VBOXHGCMSVCHELPERS,pfnDisconnectClient} 928 928 */ 929 /* static */ DECLCALLBACK(int) HGCMService::svcHlpDisconnectClient(void *pvInstance, uint32_t u32ClientId)929 /* static */ DECLCALLBACK(int) HGCMService::svcHlpDisconnectClient(void *pvInstance, uint32_t idClient) 930 930 { 931 931 HGCMService *pService = static_cast <HGCMService *> (pvInstance); … … 937 937 AssertReturn(pService->m_fInConnectOrDisconnect, VERR_INVALID_CONTEXT); 938 938 939 return pService->DisconnectClient(u32ClientId, true, NULL); 939 /* Resolve the client ID and verify that it belongs to this service before 940 trying to disconnect it. */ 941 int rc = VERR_NOT_FOUND; 942 HGCMClient * const pClient = (HGCMClient *)hgcmObjReference(idClient, HGCMOBJ_CLIENT); 943 if (pClient) 944 { 945 if (pClient->pService == pService) 946 rc = pService->DisconnectClient(idClient, true, pClient); 947 hgcmObjDereference(pClient); 948 } 949 return rc; 940 950 } 941 951 … … 1794 1804 * @param u32ClientId The handle of the client. 1795 1805 * @param fFromService Set if called by the service via 1796 * svcHlpDisconnectClient(). pClient can be NULL when 1797 * this is @c true. 1798 * @param pClient The client disconnecting. NULL if from service. 1806 * svcHlpDisconnectClient(). 1807 * @param pClient The client disconnecting. 1799 1808 * @return VBox status code. 1800 1809 */ 1801 1810 int HGCMService::DisconnectClient(uint32_t u32ClientId, bool fFromService, HGCMClient *pClient) 1802 1811 { 1803 Assert(pClient || !fFromService); 1804 1812 AssertPtr(pClient); 1805 1813 LogFlowFunc(("client id = %d, fFromService = %d, pClient = %p\n", u32ClientId, fFromService, pClient)); 1806 1814 … … 1847 1855 } 1848 1856 1849 if (pClient) 1850 LogFunc(("idClient=%u m_cClients=%u m_acClients[%u]=%u %s (cPendingCalls=%u) rc=%Rrc\n", u32ClientId, m_cClients, 1851 pClient->idxCategory, m_acClients[pClient->idxCategory], m_pszSvcName, pClient->cPendingCalls, rc)); 1857 LogFunc(("idClient=%u m_cClients=%u m_acClients[%u]=%u %s (cPendingCalls=%u) rc=%Rrc\n", u32ClientId, m_cClients, 1858 pClient->idxCategory, m_acClients[pClient->idxCategory], m_pszSvcName, pClient->cPendingCalls, rc)); 1852 1859 1853 1860 /*
Note:
See TracChangeset
for help on using the changeset viewer.