Changeset 106129 in vbox
- Timestamp:
- Sep 23, 2024 11:46:42 PM (5 months ago)
- svn:sync-xref-src-repo-rev:
- 164907
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 2 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Makefile.kmk
r106061 r106129 777 777 VBoxDD_DEFS += VBOX_WITH_LIBSLIRP 778 778 VBoxDD_SOURCES += \ 779 Network/DrvNATlibslirp.cpp 779 Network/DrvNATlibslirp.cpp \ 780 Network/RTWinPollLibslirp.cpp 780 781 Network/DrvNATlibslirp.cpp_INCS += \ 781 782 $(PATH_ROOT)/src/libs/libslirp-4.8.0/src \ -
trunk/src/VBox/Devices/Network/DrvNATlibslirp.cpp
r106061 r106129 58 58 #ifdef RT_OS_WINDOWS 59 59 # include <iprt/win/winsock2.h> 60 # include "winpoll.h" 60 61 # define inet_aton(x, y) inet_pton(2, x, y) 61 62 # define AF_INET6 23 … … 93 94 #define DRVNAT_MAXFRAMESIZE (16 * 1024) 94 95 #define DRVNAT_DEFAULT_TIMEOUT (3600*1000) 95 96 /**97 * @todo: This is a bad hack to prevent freezing the guest during high network98 * activity. Windows host only. This needs to be fixed properly.99 */100 #define VBOX_NAT_DELAY_HACK101 96 102 97 #define GET_EXTRADATA(pdrvins, node, name, rc, type, type_name, var) \ … … 609 604 rc = RTPipeWrite(pThis->hPipeWrite, "", 1, &cbIgnored); 610 605 #else 611 RT_NOREF(pThis); 606 /* kick WSAWaitForMultipleEvents */ 607 rc = WSASetEvent(pThis->hWakeupEvent); 612 608 #endif 613 609 AssertRC(rc); … … 708 704 { 709 705 PDRVNAT pThis = PDMINS_2_DATA(pDrvIns, PDRVNAT); 710 #ifdef RT_OS_WINDOWS706 #ifdef VBOX_NAT_DELAY_HACK 711 707 unsigned int cBreak = 0; 712 #else /* RT_OS_WINDOWS */ 708 #endif 709 #ifndef RT_OS_WINDOWS 713 710 unsigned int cPollNegRet = 0; 714 711 drvNAT_AddPollCb(RTPipeToNative(pThis->hPipeRead), SLIRP_POLL_IN | SLIRP_POLL_HUP, pThis); … … 789 786 drvNAT_UpdateTimeout(&uTimeout, pThis); 790 787 791 int cChangedFDs = WSAPoll(pThis->pNATState->polls, pThis->pNATState->nsock, uTimeout /* timeout */);792 int error = WSAGetLastError();793 794 if ( cChangedFDs <0)788 int cChangedFDs; 789 int error = RTWinPoll(pThis->pNATState->polls, pThis->pNATState->nsock, uTimeout /* timeout */, &cChangedFDs, pThis->hWakeupEvent); 790 791 if (error != 0) 795 792 { 796 793 LogFlow(("NAT: WSAPoll returned %d (error %d)\n", cChangedFDs, error)); 797 794 LogFlow(("NSOCK = %d\n", pThis->pNATState->nsock)); 798 799 if (error == 10022)800 RTThreadSleep(100);801 795 } 802 796 … … 1699 1693 1700 1694 #ifndef RT_OS_WINDOWS 1701 /** 1702 * Create the control pipe. 1703 */ 1695 // Create the control pipe. 1704 1696 rc = RTPipeCreate(&pThis->hPipeRead, &pThis->hPipeWrite, 0 /*fFlags*/); 1705 1697 AssertRCReturn(rc, rc); 1698 #else 1699 // Create the wakeup event handle. 1700 pThis->hWakeupEvent = NULL; 1701 pThis->hWakeupEvent = CreateEvent(NULL, FALSE, FALSE, NULL); /* auto-reset event */ 1702 Assert(pThis->hWakeupEvent != NULL); 1706 1703 #endif 1707 1704 -
trunk/src/VBox/Devices/Network/RTWinPollLibslirp.cpp
r106112 r106129 25 25 * SPDX-License-Identifier: GPL-3.0-only 26 26 */ 27 #define LOG_GROUP LOG_GROUP_ NAT_SERVICE27 #define LOG_GROUP LOG_GROUP_DRV_NAT 28 28 29 29 #include <iprt/asm.h> … … 42 42 static HANDLE g_hNetworkEvent; 43 43 44 int 45 RTWinPoll(struct pollfd *pFds, unsigned int nfds, int timeout, int *pNready) 44 int RTWinPoll(struct pollfd *pFds, unsigned int nfds, int timeout, int *pNready, HANDLE phControl) 46 45 { 47 46 AssertPtrReturn(pFds, VERR_INVALID_PARAMETER); 47 HANDLE pHandleArr[] = {phControl, g_hNetworkEvent}; 48 48 49 49 if (g_hNetworkEvent == WSA_INVALID_EVENT) … … 89 89 } 90 90 91 DWORD index = WSAWaitForMultipleEvents( 1,92 &g_hNetworkEvent,91 DWORD index = WSAWaitForMultipleEvents(2, 92 pHandleArr, 93 93 FALSE, 94 94 timeout == RT_INDEFINITE_WAIT ? WSA_INFINITE : timeout, -
trunk/src/VBox/Devices/Network/winpoll.h
r106112 r106129 59 59 #endif 60 60 RT_C_DECLS_BEGIN 61 int RTWinPoll(struct pollfd *pFds, unsigned int nfds, int timeout, int *pNready );61 int RTWinPoll(struct pollfd *pFds, unsigned int nfds, int timeout, int *pNready, HANDLE phControl); 62 62 RT_C_DECLS_END 63 63 #endif /* !VBOX_INCLUDED_SRC_NAT_winpoll_h */
Note:
See TracChangeset
for help on using the changeset viewer.