void VBoxClipboardDestroy(const VBOXSERVICEENV *pEnv, void *pInstance) { VBOXCLIPBOARDCONTEXT *pCtx = (VBOXCLIPBOARDCONTEXT *)pInstance; if (pCtx != &gCtx) { Log(("VBoxTray: VBoxClipboardDestroy: invalid instance %p (our = %p)!\n", pCtx, &gCtx)); pCtx = &gCtx; } vboxClipboardDestroy (pCtx); VbglR3ClipboardDisconnect(pCtx->u32ClientID); memset (pCtx, 0, sizeof (*pCtx)); return; }
DECLCALLBACK(void) VBoxClipboardDestroy(void *pInstance) { AssertPtrReturnVoid(pInstance); PVBOXCLIPBOARDCONTEXT pCtx = (PVBOXCLIPBOARDCONTEXT)pInstance; AssertPtr(pCtx); /* Make sure that we are disconnected. */ Assert(pCtx->u32ClientID == 0); vboxClipboardDestroy(pCtx); RT_BZERO(pCtx, sizeof(VBOXCLIPBOARDCONTEXT)); return; }
static DECLCALLBACK(int) svcUnload (void *) { vboxClipboardDestroy (); RTCritSectDelete (&critsect); return VINF_SUCCESS; }