Changeset 41642 in vbox for trunk/src/VBox/Additions/common
- Timestamp:
- Jun 11, 2012 10:30:54 AM (13 years ago)
- Location:
- trunk/src/VBox/Additions/common/VBoxGuest
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
r40198 r41642 843 843 switch (uCmd) 844 844 { 845 case VBOXGUEST_IOCTL_ INTERNAL_SET_MOUSE_NOTIFY_CALLBACK:845 case VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: 846 846 { 847 847 PVOID pvBuf = pStack->Parameters.Others.Argument1; -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
r41640 r41642 727 727 pDevExt->acMouseFeatureUsage[i] = 0; 728 728 pDevExt->fMouseStatus = 0; 729 pDevExt->Mouse SetNotifyCallback.pfnNotify = NULL;730 pDevExt->Mouse SetNotifyCallback.pvNotify= NULL;729 pDevExt->MouseNotifyCallback.pfnNotify = NULL; 730 pDevExt->MouseNotifyCallback.pvUser = NULL; 731 731 pDevExt->cISR = 0; 732 732 … … 1248 1248 { 1249 1249 Log(("VBoxGuestCommonIOCtl: SET_MOUSE_NOTIFY_CALLBACK\n")); 1250 RTSpinlockAcquire(pDevExt->SessionSpinlock); 1251 ASMAtomicWriteNullPtr(&pDevExt->MouseSetNotifyCallback.pfnNotify); 1252 pDevExt->MouseSetNotifyCallback.pvNotify = pNotify->pvNotify; 1253 ASMAtomicWritePtr(&pDevExt->MouseSetNotifyCallback.pfnNotify, 1254 pNotify->pfnNotify); 1255 RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock); 1256 /* Make sure no one is referencing the old data - hacky but should be 1250 1251 RTSpinlockAcquire(pDevExt->EventSpinlock); 1252 pDevExt->MouseNotifyCallback = *pNotify; 1253 RTSpinlockReleaseNoInts(pDevExt->EventSpinlock); 1254 1255 /* Make sure an active ISR is referencing the old data - hacky but should be 1257 1256 * effective. */ 1258 while (pDevExt->cISR > 0); 1257 while (pDevExt->cISR > 0) 1258 ASMNopPause(); 1259 1259 1260 return VINF_SUCCESS; 1260 1261 } … … 2540 2541 2541 2542 #ifndef RT_OS_WINDOWS /* Windows has its own implementation of this. */ 2542 case VBOXGUEST_IOCTL_ INTERNAL_SET_MOUSE_NOTIFY_CALLBACK:2543 case VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: 2543 2544 CHECKRET_RING0("SET_MOUSE_NOTIFY_CALLBACK"); 2544 CHECKRET_SIZE("SET_MOUSE_NOTIFY_CALLBACK", 2545 sizeof(VBoxGuestMouseSetNotifyCallback)); 2545 CHECKRET_SIZE("SET_MOUSE_NOTIFY_CALLBACK", sizeof(VBoxGuestMouseSetNotifyCallback)); 2546 2546 rc = VBoxGuestCommonIOCtl_SetMouseNotifyCallback(pDevExt, (VBoxGuestMouseSetNotifyCallback *)pvData); 2547 2547 break; … … 2639 2639 bool VBoxGuestCommonISR(PVBOXGUESTDEVEXT pDevExt) 2640 2640 { 2641 bool fMousePositionChanged = false; 2642 VMMDevEvents volatile *pReq = pDevExt->pIrqAckEvents; 2643 int rc = 0; 2644 bool fOurIrq; 2641 #ifndef RT_OS_WINDOWS 2642 VBoxGuestMouseSetNotifyCallback MouseNotifyCallback = { NULL, NULL }; 2643 #endif 2644 bool fMousePositionChanged = false; 2645 VMMDevEvents volatile *pReq = pDevExt->pIrqAckEvents; 2646 int rc = 0; 2647 bool fOurIrq; 2645 2648 2646 2649 /* … … 2681 2684 if (fEvents & VMMDEV_EVENT_MOUSE_POSITION_CHANGED) 2682 2685 { 2686 MouseNotifyCallback = pDevExt->MouseNotifyCallback; 2683 2687 fMousePositionChanged = true; 2684 2688 fEvents &= ~VMMDEV_EVENT_MOUSE_POSITION_CHANGED; … … 2760 2764 VBoxGuestNativeISRMousePollEvent(pDevExt); 2761 2765 #ifndef RT_OS_WINDOWS 2762 if ( pDevExt->MouseSetNotifyCallback.pfnNotify)2763 pDevExt->MouseSetNotifyCallback.pfnNotify(pDevExt->MouseSetNotifyCallback.pvNotify);2766 if (MouseNotifyCallback.pfnNotify) 2767 MouseNotifyCallback.pfnNotify(MouseNotifyCallback.pvUser); 2764 2768 #endif 2765 2769 } -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
r41640 r41642 167 167 * together inside the session spinlock. */ 168 168 uint32_t volatile fMouseStatus; 169 /** Callback and user data for a kernel mouse handler. */170 VBoxGuestMouseSetNotifyCallback volatile MouseSetNotifyCallback;171 169 /** Counter of number of active ISRs. Currently used for safely removing 172 170 * the mouse handler callback. */ 173 171 uint32_t volatile cISR; 172 /** Callback and user data for a kernel mouse handler. */ 173 VBoxGuestMouseSetNotifyCallback MouseNotifyCallback; 174 174 175 175 /** Windows part. */
Note:
See TracChangeset
for help on using the changeset viewer.