- Timestamp:
- Dec 6, 2013 9:54:10 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 91159
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
r49814 r49817 241 241 /** The tail of the landed Darwin URBs. */ 242 242 PUSBPROXYURBOSX pTaxingTail; 243 /** Runloop reference of the thread reaping. */ 244 volatile CFRunLoopRef hRunLoopReaping; 245 /** Flag whether the reaping thread is about the be waked. */ 246 volatile bool fReapingThreadWake; 243 247 } USBPROXYDEVOSX, *PUSBPROXYDEVOSX; 244 248 … … 1790 1794 PUSBPROXYDEVOSX pDevOsX = (PUSBPROXYDEVOSX)pProxyDev->Backend.pv; 1791 1795 1796 ASMAtomicXchgPtr((void * volatile *)&pDevOsX->hRunLoopReaping, CFRunLoopGetCurrent()); 1797 1798 if (ASMAtomicReadBool(&pDevOsX->fReapingThreadWake)) 1799 { 1800 /* Return immediately. */ 1801 ASMAtomicXchgPtr((void * volatile *)&pDevOsX->hRunLoopReaping, NULL); 1802 return NULL; 1803 } 1804 1792 1805 /* 1793 1806 * If we've got any in-flight URBs, excercise the runloop. … … 1800 1813 && pDevOsX->pInFlightHead) 1801 1814 CFRunLoopRunInMode(g_pRunLoopMode, cMillies / 1000.0, true); 1815 1816 ASMAtomicXchgPtr((void * volatile *)&pDevOsX->hRunLoopReaping, NULL); 1802 1817 1803 1818 /* … … 1872 1887 1873 1888 1874 static int usbProxyDarwin UrbReap(PUSBPROXYDEV pProxyDev, RTMSINTERVAL cMillies)1889 static int usbProxyDarwinWakeup(PUSBPROXYDEV pProxyDev) 1875 1890 { 1876 1891 PUSBPROXYDEVOSX pDevOsX = (PUSBPROXYDEVOSX)pProxyDev->Backend.pv; 1877 1892 1878 CFRunLoopStop(g_pRunLoopMode); 1893 ASMAtomicXchgBool(&pDevOsX->fReapingThreadWake, true); 1894 1895 CFRunLoopRef hRunLoopWake = (CFRunLoopRef)ASMAtomicReadPtr((void * volatile *)&pDevOsX->hRunLoopReaping); 1896 if (hRunLoopWake) 1897 CFRunLoopStop(hRunLoopWake); 1898 1899 ASMAtomicXchgBool(&pDevOsX->fReapingThreadWake, false); 1900 1879 1901 return VINF_SUCCESS; 1880 1902 }
Note:
See TracChangeset
for help on using the changeset viewer.