Changeset 58282 in vbox
- Timestamp:
- Oct 16, 2015 2:51:40 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 103476
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/Makefile.kmk
r58269 r58282 836 836 r3/posix/fs3-posix.cpp \ 837 837 r3/posix/ldrNative-posix.cpp \ 838 r3/posix/localipc-posix.cpp \ 838 839 r3/posix/path-posix.cpp \ 839 840 r3/posix/path2-posix.cpp \ -
trunk/src/VBox/Runtime/VBox/VBoxRTDeps.cpp
r57358 r58282 34 34 #include <iprt/asm.h> 35 35 #include <iprt/assert.h> 36 #include <iprt/localipc.h> 36 37 #include <iprt/buildconfig.h> 37 38 #include <iprt/system.h> … … 62 63 #endif 63 64 (PFNRT)xmlLoadCatalogs, 65 (PFNRT)RTLocalIpcServerCreate, 64 66 (PFNRT)MD5_Init, 65 67 (PFNRT)RC4, -
trunk/src/VBox/Runtime/include/internal/socket.h
r56290 r58282 52 52 53 53 #ifndef IPRT_INTERNAL_SOCKET_POLLING_ONLY 54 int rtSocketResolverError(void); 55 int rtSocketCreateForNative(RTSOCKETINT **ppSocket, RTSOCKETNATIVE hNative); 56 int rtSocketCreate(PRTSOCKET phSocket, int iDomain, int iType, int iProtocol); 57 int rtSocketBind(RTSOCKET hSocket, PCRTNETADDR pAddr); 58 int rtSocketBindRawAddr(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr); 59 int rtSocketListen(RTSOCKET hSocket, int cMaxPending); 60 int rtSocketAccept(RTSOCKET hSocket, PRTSOCKET phClient, struct sockaddr *pAddr, size_t *pcbAddr); 61 int rtSocketConnect(RTSOCKET hSocket, PCRTNETADDR pAddr, RTMSINTERVAL cMillies); 62 int rtSocketSetOpt(RTSOCKET hSocket, int iLevel, int iOption, void const *pvValue, int cbValue); 54 DECLHIDDEN(int) rtSocketResolverError(void); 55 DECLHIDDEN(int) rtSocketCreateForNative(RTSOCKETINT **ppSocket, RTSOCKETNATIVE hNative); 56 DECLHIDDEN(int) rtSocketCreate(PRTSOCKET phSocket, int iDomain, int iType, int iProtocol); 57 DECLHIDDEN(int) rtSocketBind(RTSOCKET hSocket, PCRTNETADDR pAddr); 58 DECLHIDDEN(int) rtSocketBindRawAddr(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr); 59 DECLHIDDEN(int) rtSocketListen(RTSOCKET hSocket, int cMaxPending); 60 DECLHIDDEN(int) rtSocketAccept(RTSOCKET hSocket, PRTSOCKET phClient, struct sockaddr *pAddr, size_t *pcbAddr); 61 DECLHIDDEN(int) rtSocketConnect(RTSOCKET hSocket, PCRTNETADDR pAddr, RTMSINTERVAL cMillies); 62 DECLHIDDEN(int) rtSocketConnectRaw(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr); 63 DECLHIDDEN(int) rtSocketSetOpt(RTSOCKET hSocket, int iLevel, int iOption, void const *pvValue, int cbValue); 63 64 #endif /* IPRT_INTERNAL_SOCKET_POLLING_ONLY */ 64 65 65 intrtSocketPollGetHandle(RTSOCKET hSocket, uint32_t fEvents, PRTHCINTPTR phNative);66 uint32_trtSocketPollStart(RTSOCKET hSocket, RTPOLLSET hPollSet, uint32_t fEvents, bool fFinalEntry, bool fNoWait);67 uint32_trtSocketPollDone(RTSOCKET hSocket, uint32_t fEvents, bool fFinalEntry, bool fHarvestEvents);66 DECLHIDDEN(int) rtSocketPollGetHandle(RTSOCKET hSocket, uint32_t fEvents, PRTHCINTPTR phNative); 67 DECLHIDDEN(uint32_t) rtSocketPollStart(RTSOCKET hSocket, RTPOLLSET hPollSet, uint32_t fEvents, bool fFinalEntry, bool fNoWait); 68 DECLHIDDEN(uint32_t) rtSocketPollDone(RTSOCKET hSocket, uint32_t fEvents, bool fFinalEntry, bool fHarvestEvents); 68 69 69 70 RT_C_DECLS_END -
trunk/src/VBox/Runtime/r3/socket.cpp
r57978 r58282 212 212 * @returns iprt status code. 213 213 */ 214 intrtSocketResolverError(void)214 DECLHIDDEN(int) rtSocketResolverError(void) 215 215 { 216 216 #ifdef RT_OS_WINDOWS … … 400 400 * @param hNative The native handle. 401 401 */ 402 intrtSocketCreateForNative(RTSOCKETINT **ppSocket, RTSOCKETNATIVE hNative)402 DECLHIDDEN(int) rtSocketCreateForNative(RTSOCKETINT **ppSocket, RTSOCKETNATIVE hNative) 403 403 { 404 404 RTSOCKETINT *pThis = (RTSOCKETINT *)RTMemPoolAlloc(RTMEMPOOL_DEFAULT, sizeof(*pThis)); … … 444 444 * @param iProtocol Socket parameter, usually 0. 445 445 */ 446 intrtSocketCreate(PRTSOCKET phSocket, int iDomain, int iType, int iProtocol)446 DECLHIDDEN(int) rtSocketCreate(PRTSOCKET phSocket, int iDomain, int iType, int iProtocol) 447 447 { 448 448 /* … … 1425 1425 1426 1426 1427 RTDECL(int) RTSocketSelectOneEx(RTSOCKET hSocket, uint32_t fEvents, uint32_t *pfEvents, 1428 RTMSINTERVAL cMillies) 1427 RTDECL(int) RTSocketSelectOneEx(RTSOCKET hSocket, uint32_t fEvents, uint32_t *pfEvents, RTMSINTERVAL cMillies) 1429 1428 { 1430 1429 /* … … 1587 1586 * @param pAddr The address to bind to. 1588 1587 */ 1589 intrtSocketBind(RTSOCKET hSocket, PCRTNETADDR pAddr)1588 DECLHIDDEN(int) rtSocketBind(RTSOCKET hSocket, PCRTNETADDR pAddr) 1590 1589 { 1591 1590 RTSOCKADDRUNION u; … … 1607 1606 * @param cbAddr The size of the address. 1608 1607 */ 1609 intrtSocketBindRawAddr(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr)1608 DECLHIDDEN(int) rtSocketBindRawAddr(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr) 1610 1609 { 1611 1610 /* … … 1637 1636 * @param cMaxPending The max number of pending connections. 1638 1637 */ 1639 intrtSocketListen(RTSOCKET hSocket, int cMaxPending)1638 DECLHIDDEN(int) rtSocketListen(RTSOCKET hSocket, int cMaxPending) 1640 1639 { 1641 1640 /* … … 1668 1667 * size of what's stored at @a pAddr. 1669 1668 */ 1670 intrtSocketAccept(RTSOCKET hSocket, PRTSOCKET phClient, struct sockaddr *pAddr, size_t *pcbAddr)1669 DECLHIDDEN(int) rtSocketAccept(RTSOCKET hSocket, PRTSOCKET phClient, struct sockaddr *pAddr, size_t *pcbAddr) 1671 1670 { 1672 1671 /* … … 1727 1726 * configured on the running system. 1728 1727 */ 1729 intrtSocketConnect(RTSOCKET hSocket, PCRTNETADDR pAddr, RTMSINTERVAL cMillies)1728 DECLHIDDEN(int) rtSocketConnect(RTSOCKET hSocket, PCRTNETADDR pAddr, RTMSINTERVAL cMillies) 1730 1729 { 1731 1730 /* … … 1817 1816 1818 1817 /** 1818 * Wrapper around connect, raw address, no timeout. 1819 * 1820 * @returns IPRT status code. 1821 * @param hSocket The socket handle. 1822 * @param pvAddr The raw socket address to connect to. 1823 * @param cbAddr The size of the raw address. 1824 */ 1825 DECLHIDDEN(int) rtSocketConnectRaw(RTSOCKET hSocket, void const *pvAddr, size_t cbAddr) 1826 { 1827 /* 1828 * Validate input. 1829 */ 1830 RTSOCKETINT *pThis = hSocket; 1831 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 1832 AssertReturn(pThis->u32Magic == RTSOCKET_MAGIC, VERR_INVALID_HANDLE); 1833 AssertReturn(rtSocketTryLock(pThis), VERR_CONCURRENT_ACCESS); 1834 1835 int rc; 1836 if (connect(pThis->hNative, (const struct sockaddr *)pvAddr, (int)cbAddr) == 0) 1837 rc = VINF_SUCCESS; 1838 else 1839 rc = rtSocketError(); 1840 1841 rtSocketUnlock(pThis); 1842 return rc; 1843 } 1844 1845 1846 /** 1819 1847 * Wrapper around setsockopt. 1820 1848 * … … 1826 1854 * @param cbValue The size of the value pointed to by pvValue. 1827 1855 */ 1828 intrtSocketSetOpt(RTSOCKET hSocket, int iLevel, int iOption, void const *pvValue, int cbValue)1856 DECLHIDDEN(int) rtSocketSetOpt(RTSOCKET hSocket, int iLevel, int iOption, void const *pvValue, int cbValue) 1829 1857 { 1830 1858 /* … … 1854 1882 * @param phNative Where to put the primary handle. 1855 1883 */ 1856 intrtSocketPollGetHandle(RTSOCKET hSocket, uint32_t fEvents, PRTHCINTPTR phNative)1884 DECLHIDDEN(int) rtSocketPollGetHandle(RTSOCKET hSocket, uint32_t fEvents, PRTHCINTPTR phNative) 1857 1885 { 1858 1886 RTSOCKETINT *pThis = hSocket; … … 2053 2081 * @c true, we don't currently care about that oddity... 2054 2082 */ 2055 uint32_trtSocketPollStart(RTSOCKET hSocket, RTPOLLSET hPollSet, uint32_t fEvents, bool fFinalEntry, bool fNoWait)2083 DECLHIDDEN(uint32_t) rtSocketPollStart(RTSOCKET hSocket, RTPOLLSET hPollSet, uint32_t fEvents, bool fFinalEntry, bool fNoWait) 2056 2084 { 2057 2085 RTSOCKETINT *pThis = hSocket; … … 2125 2153 * @param fHarvestEvents Set if we should check for pending events. 2126 2154 */ 2127 uint32_trtSocketPollDone(RTSOCKET hSocket, uint32_t fEvents, bool fFinalEntry, bool fHarvestEvents)2155 DECLHIDDEN(uint32_t) rtSocketPollDone(RTSOCKET hSocket, uint32_t fEvents, bool fFinalEntry, bool fHarvestEvents) 2128 2156 { 2129 2157 RTSOCKETINT *pThis = hSocket; -
trunk/src/VBox/Runtime/r3/win/localipc-win.cpp
r57974 r58282 343 343 */ 344 344 AssertPtrReturn(phServer, VERR_INVALID_POINTER); 345 346 AssertReturn(!(fFlags & ~RTLOCALIPC_FLAGS_VALID_MASK), VERR_INVALID_FLAGS); 347 AssertReturn(fFlags & RTLOCALIPC_FLAGS_MULTI_SESSION, VERR_INVALID_FLAGS); /** @todo Implement !RTLOCALIPC_FLAGS_MULTI_SESSION */ 348 345 349 AssertPtrReturn(pszName, VERR_INVALID_POINTER); 346 AssertReturn(*pszName, VERR_INVALID_PARAMETER); 347 AssertReturn(!(fFlags & ~(RTLOCALIPC_FLAGS_VALID_MASK)), VERR_INVALID_PARAMETER); 348 AssertReturn((fFlags & RTLOCALIPC_FLAGS_MULTI_SESSION), VERR_INVALID_PARAMETER); /** @todo Implement !RTLOCALIPC_FLAGS_MULTI_SESSION */ 350 AssertReturn(*pszName, VERR_INVALID_NAME); 349 351 350 352 /* … … 650 652 AssertPtrReturn(phSession, VERR_INVALID_POINTER); 651 653 AssertPtrReturn(pszName, VERR_INVALID_POINTER); 652 AssertReturn(*pszName, VERR_INVALID_ PARAMETER);653 AssertReturn(!fFlags, VERR_INVALID_ PARAMETER); /* Flags currently unused, must be 0. */654 AssertReturn(*pszName, VERR_INVALID_NAME); 655 AssertReturn(!fFlags, VERR_INVALID_FLAGS); /* Flags currently unused, must be 0. */ 654 656 655 657 PRTLOCALIPCSESSIONINT pThis = (PRTLOCALIPCSESSIONINT)RTMemAlloc(sizeof(*pThis)); -
trunk/src/VBox/Runtime/testcase/Makefile.kmk
r57956 r58282 81 81 tstLdr \ 82 82 tstLdrLoad \ 83 tstRTLocalIpc \ 83 84 tstRTLdrVerifyPeImage \ 84 85 tstRTList \ … … 148 149 PROGRAMS.win += \ 149 150 tstRTCritSectW32 \ 150 tstRTLocalIpc \151 151 tstRTProcWait \ 152 152 tstFileAppendWin-1 \ -
trunk/src/VBox/Runtime/testcase/tstRTLocalIpc.cpp
r58280 r58282 60 60 static DECLCALLBACK(int) testServerListenAndCancelThread(RTTHREAD hSelf, void *pvUser) 61 61 { 62 PRTLOCALIPCSERVER p Server = (PRTLOCALIPCSERVER)pvUser;63 AssertPtr(p Server);62 PRTLOCALIPCSERVER phServer = (PRTLOCALIPCSERVER)pvUser; 63 AssertPtr(phServer); 64 64 65 65 RTThreadSleep(5000); /* Wait a bit to simulate waiting in main thread. */ 66 66 67 int rc = RTLocalIpcServerCancel(*p Server);67 int rc = RTLocalIpcServerCancel(*phServer); 68 68 AssertRC(rc); 69 69 … … 75 75 RTTestSub(hTest, "testServerListenAndCancel"); 76 76 77 RTLOCALIPCSERVER ipcServer;78 int rc = RTLocalIpcServerCreate(& ipcServer, "testServerListenAndCancel",77 RTLOCALIPCSERVER hIpcServer; 78 int rc = RTLocalIpcServerCreate(&hIpcServer, "testServerListenAndCancel", 79 79 RTLOCALIPC_FLAGS_MULTI_SESSION); 80 80 if (RT_SUCCESS(rc)) … … 84 84 RTTHREAD hThread; 85 85 rc = RTThreadCreate(&hThread, testServerListenAndCancelThread, 86 & ipcServer, 0 /* Stack */, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "tstIpc1");86 &hIpcServer, 0 /* Stack */, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "tstIpc1"); 87 87 if (RT_SUCCESS(rc)) 88 88 { … … 90 90 { 91 91 RTTestPrintf(hTest, RTTESTLVL_INFO, "Listening for incoming connections ...\n"); 92 RTLOCALIPCSESSION ipcSession;93 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerListen( ipcServer, &ipcSession), VERR_CANCELLED);94 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel( ipcServer), VINF_SUCCESS);95 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerDestroy( ipcServer), VINF_SUCCESS);92 RTLOCALIPCSESSION hIpcSession; 93 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerListen(hIpcServer, &hIpcSession), VERR_CANCELLED); 94 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel(hIpcServer), VINF_SUCCESS); 95 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 96 96 97 97 RTTestPrintf(hTest, RTTESTLVL_INFO, "Waiting for thread to exit ...\n"); 98 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 99 30 * 1000 /* 30s timeout */, NULL), VINF_SUCCESS); 98 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 30 * 1000 /* 30s timeout */, NULL), VINF_SUCCESS); 100 99 } while (0); 101 100 } … … 109 108 } 110 109 111 static DECLCALLBACK(int) testSe ssionConnectionThread(RTTHREAD hSelf, void *pvUser)110 static DECLCALLBACK(int) testServerListenThread(RTTHREAD hSelf, void *pvUser) 112 111 { 113 112 PLOCALIPCTHREADCTX pCtx = (PLOCALIPCTHREADCTX)pvUser; … … 115 114 116 115 int rc; 117 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testSe ssionConnectionThread: Listening for incoming connections ...\n");116 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testServerListenThread: Listening for incoming connections ...\n"); 118 117 for (;;) 119 118 { 120 RTLOCALIPCSESSION ipcSession; 121 rc = RTLocalIpcServerListen(pCtx->hServer, &ipcSession); 122 RTTestPrintf(pCtx->hTest, RTTESTLVL_DEBUG, "testSessionConnectionThread: Listening returned with rc=%Rrc\n", rc); 123 if (RT_SUCCESS(rc)) 124 { 125 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testSessionConnectionThread: Got new client connection\n"); 119 RTLOCALIPCSESSION hIpcSession; 120 rc = RTLocalIpcServerListen(pCtx->hServer, &hIpcSession); 121 RTTestPrintf(pCtx->hTest, RTTESTLVL_DEBUG, "testServerListenThread: Listening returned with rc=%Rrc\n", rc); 122 if (RT_SUCCESS(rc)) 123 { 124 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testServerListenThread: Got new client connection\n"); 125 RTTEST_CHECK_RC(pCtx->hTest, RTLocalIpcSessionClose(hIpcSession), VINF_SUCCESS); 126 126 } 127 127 else … … 129 129 } 130 130 131 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testSe ssionConnectionThread: Ended with rc=%Rrc\n", rc);131 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testServerListenThread: Ended with rc=%Rrc\n", rc); 132 132 return rc; 133 133 } … … 138 138 { 139 139 RTThreadSleep(2000); /* Fudge */ 140 RTLOCALIPCSESSION clientSession;141 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionConnect(& clientSession, "tstRTLocalIpcSessionConnection",142 0 /* Flags */),VINF_SUCCESS);140 RTLOCALIPCSESSION hClientSession; 141 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionConnect(&hClientSession, "tstRTLocalIpcSessionConnection",0 /* Flags */), 142 VINF_SUCCESS); 143 143 RTThreadSleep(5000); /* Fudge */ 144 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionClose( clientSession), VINF_SUCCESS);144 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionClose(hClientSession), VINF_SUCCESS); 145 145 146 146 } while (0); … … 153 153 RTTestSub(hTest, "testSessionConnection"); 154 154 155 RTLOCALIPCSERVER ipcServer; 156 int rc = RTLocalIpcServerCreate(&ipcServer, "tstRTLocalIpcSessionConnection", 157 RTLOCALIPC_FLAGS_MULTI_SESSION); 155 RTLOCALIPCSERVER hIpcServer; 156 int rc = RTLocalIpcServerCreate(&hIpcServer, "tstRTLocalIpcSessionConnection", RTLOCALIPC_FLAGS_MULTI_SESSION); 158 157 if (RT_SUCCESS(rc)) 159 158 { 160 159 #ifndef VBOX_TESTCASES_WITH_NO_THREADING 161 LOCALIPCTHREADCTX threadCtx = { ipcServer, hTest };160 LOCALIPCTHREADCTX threadCtx = { hIpcServer, hTest }; 162 161 163 162 /* Spawn a simple worker thread and let it listen for incoming connections. 164 163 * In the meanwhile we try to cancel the server and see what happens. */ 165 164 RTTHREAD hThread; 166 rc = RTThreadCreate(&hThread, testSe ssionConnectionThread,165 rc = RTThreadCreate(&hThread, testServerListenThread, 167 166 &threadCtx, 0 /* Stack */, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "tstIpc2"); 168 167 if (RT_SUCCESS(rc)) … … 171 170 { 172 171 RTPROCESS hProc; 173 const char *apszArgs[4] = { pszExecPath, "child", "t stRTLocalIpcSessionConnectionFork", NULL };174 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, 175 RTENV_DEFAULT, 0 /* fFlags*/, &hProc),VINF_SUCCESS);172 const char *apszArgs[4] = { pszExecPath, "child", "testSessionConnectionChild", NULL }; 173 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, RTENV_DEFAULT, 0 /* fFlags*/, &hProc), 174 VINF_SUCCESS); 176 175 RTPROCSTATUS stsChild; 177 176 RTTEST_CHECK_RC_BREAK(hTest, RTProcWait(hProc, RTPROCWAIT_FLAGS_BLOCK, &stsChild), VINF_SUCCESS); 178 177 RTTestPrintf(hTest, RTTESTLVL_INFO, "Child terminated, waiting for server thread ...\n"); 179 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel(ipcServer), VINF_SUCCESS); 180 int threadRc;181 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread,182 30 * 1000 /* 30s timeout */, &threadRc), VINF_SUCCESS);183 RTTEST_CHECK_RC_BREAK(hTest, threadRc, VERR_CANCELLED);178 179 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel(hIpcServer), VINF_SUCCESS); 180 int rcThread; 181 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 30 * 1000 /* 30s timeout */, &rcThread), VINF_SUCCESS); 182 RTTEST_CHECK_RC_BREAK(hTest, rcThread, VERR_CANCELLED); 184 183 RTTestPrintf(hTest, RTTESTLVL_INFO, "Server thread terminated successfully\n"); 185 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerDestroy(ipcServer), VINF_SUCCESS); 184 185 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 186 hIpcServer = NIL_RTLOCALIPCSERVER; 187 186 188 RTTEST_CHECK_BREAK(hTest, stsChild.enmReason == RTPROCEXITREASON_NORMAL); 187 189 RTTEST_CHECK_BREAK(hTest, stsChild.iStatus == 0); 188 } 189 while (0); 190 } while (0); 190 191 } 191 192 else … … 195 196 { 196 197 RTPROCESS hProc; 197 const char *apszArgs[4] = { pszExecPath, "child", "t stRTLocalIpcSessionConnectionFork", NULL };198 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, 199 RTENV_DEFAULT, 0 /* fFlags*/, &hProc), VINF_SUCCESS); 200 RTLOCALIPCSESSION ipcSession;201 rc = RTLocalIpcServerListen( ipcServer, &ipcSession);198 const char *apszArgs[4] = { pszExecPath, "child", "testSessionConnectionChild", NULL }; 199 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, RTENV_DEFAULT, 0 /* fFlags*/, &hProc), VINF_SUCCESS); 200 201 RTLOCALIPCSESSION hIpcSession; 202 rc = RTLocalIpcServerListen(hIpcServer, &hIpcSession); 202 203 if (RT_SUCCESS(rc)) 203 204 { 204 RTTestPrintf(hTest, RTTESTLVL_INFO, "testSessionConnectionThread: Got new client connection\n"); 205 RTTestPrintf(hTest, RTTESTLVL_INFO, "testServerListenThread: Got new client connection\n"); 206 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionClose(hIpcSession), VINF_SUCCESS); 205 207 } 206 208 else … … 209 211 } while (0); 210 212 #endif 213 if (hIpcServer != NIL_RTLOCALIPCSERVER) 214 RTTEST_CHECK_RC(hTest, RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 211 215 } 212 216 else … … 225 229 { 226 230 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testSessionWaitThread: Listening for incoming connections ...\n"); 227 RTLOCALIPCSESSION ipcSession;228 rc = RTLocalIpcServerListen(pCtx->hServer, & ipcSession);231 RTLOCALIPCSESSION hIpcSession; 232 rc = RTLocalIpcServerListen(pCtx->hServer, &hIpcSession); 229 233 if (RT_SUCCESS(rc)) 230 234 { 231 235 RTTestPrintf(pCtx->hTest, RTTESTLVL_INFO, "testSessionWaitThread: Got new client connection, waiting a bit ...\n"); 232 236 RTThreadSleep(2000); 233 rc = RTLocalIpcSessionClose( ipcSession);237 rc = RTLocalIpcSessionClose(hIpcSession); 234 238 } 235 239 else … … 253 257 0 /* Flags */), VINF_SUCCESS); 254 258 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionWaitForData(clientSession, 100 /* 100ms timeout */), 255 259 VERR_TIMEOUT); 256 260 /* Next, try 60s timeout. Should be returning way earlier because the server closed the 257 261 * connection after the first client connected. */ 258 262 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionWaitForData(clientSession, 60 * 1000), 259 263 VERR_BROKEN_PIPE); 260 264 /* Last try, also should fail because the server should be not around anymore. */ 261 265 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionWaitForData(clientSession, 5 * 1000), 262 266 VERR_BROKEN_PIPE); 263 267 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcSessionClose(clientSession), VINF_SUCCESS); 264 268 … … 272 276 RTTestSub(hTest, "testSessionWait"); 273 277 274 RTLOCALIPCSERVER ipcServer;275 int rc = RTLocalIpcServerCreate(& ipcServer, "tstRTLocalIpcSessionWait",278 RTLOCALIPCSERVER hIpcServer; 279 int rc = RTLocalIpcServerCreate(&hIpcServer, "tstRTLocalIpcSessionWait", 276 280 RTLOCALIPC_FLAGS_MULTI_SESSION); 277 281 if (RT_SUCCESS(rc)) 278 282 { 279 LOCALIPCTHREADCTX threadCtx = { ipcServer, hTest };283 LOCALIPCTHREADCTX threadCtx = { hIpcServer, hTest }; 280 284 281 285 /* Spawn a simple worker thread and let it listen for incoming connections. … … 290 294 RTPROCESS hProc; 291 295 const char *apszArgs[4] = { pszExecPath, "child", "tstRTLocalIpcSessionWaitFork", NULL }; 292 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, 293 RTENV_DEFAULT, 0 /* fFlags*/, &hProc),VINF_SUCCESS);296 RTTEST_CHECK_RC_BREAK(hTest, RTProcCreate(pszExecPath, apszArgs, RTENV_DEFAULT, 0 /* fFlags*/, &hProc), 297 VINF_SUCCESS); 294 298 RTThreadSleep(5000); /* Let the server run for some time ... */ 295 299 RTTestPrintf(hTest, RTTESTLVL_INFO, "Cancelling server listening\n"); 296 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel( ipcServer), VINF_SUCCESS);300 RTTEST_CHECK_RC_BREAK(hTest, RTLocalIpcServerCancel(hIpcServer), VINF_SUCCESS); 297 301 /* Wait for the server thread to terminate. */ 298 int threadRc; 299 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 300 30 * 1000 /* 30s timeout */, &threadRc), VINF_SUCCESS); 301 RTTEST_CHECK_RC_BREAK(hTest, threadRc, VERR_CANCELLED); 302 RTTEST_CHECK_RC(hTest, RTLocalIpcServerDestroy(ipcServer), VINF_SUCCESS); 302 int rcThread; 303 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 30 * 1000 /* 30s timeout */, &rcThread), VINF_SUCCESS); 304 RTTEST_CHECK_RC_BREAK(hTest, rcThread, VERR_CANCELLED); 305 RTTEST_CHECK_RC(hTest, RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 303 306 RTTestPrintf(hTest, RTTESTLVL_INFO, "Server thread terminated successfully\n"); 304 307 /* Check if the child ran successfully. */ … … 485 488 RTTestSub(hTest, "testSessionData"); 486 489 487 RTLOCALIPCSERVER ipcServer;488 int rc = RTLocalIpcServerCreate(& ipcServer, "tstRTLocalIpcSessionData",490 RTLOCALIPCSERVER hIpcServer; 491 int rc = RTLocalIpcServerCreate(&hIpcServer, "tstRTLocalIpcSessionData", 489 492 RTLOCALIPC_FLAGS_MULTI_SESSION); 490 493 if (RT_SUCCESS(rc)) 491 494 { 492 LOCALIPCTHREADCTX threadCtx = { ipcServer, hTest };495 LOCALIPCTHREADCTX threadCtx = { hIpcServer, hTest }; 493 496 #if 0 494 497 /* Run server + client in threads instead of fork'ed processes (useful for debugging). */ … … 503 506 do 504 507 { 505 int threadRc;508 int rcThread; 506 509 RTTEST_CHECK_RC(hTest, RTThreadWait(hThreadServer, 507 5 * 60 * 1000 /* 5 minutes timeout */, & threadRc), VINF_SUCCESS);508 RTTEST_CHECK_RC_BREAK(hTest, threadRc, VINF_SUCCESS);510 5 * 60 * 1000 /* 5 minutes timeout */, &rcThread), VINF_SUCCESS); 511 RTTEST_CHECK_RC_BREAK(hTest, rcThread, VINF_SUCCESS); 509 512 RTTEST_CHECK_RC(hTest, RTThreadWait(hThreadClient, 510 5 * 60 * 1000 /* 5 minutes timeout */, & threadRc), VINF_SUCCESS);511 RTTEST_CHECK_RC_BREAK(hTest, threadRc, VINF_SUCCESS);513 5 * 60 * 1000 /* 5 minutes timeout */, &rcThread), VINF_SUCCESS); 514 RTTEST_CHECK_RC_BREAK(hTest, rcThread, VINF_SUCCESS); 512 515 513 516 } while (0); … … 528 531 RTENV_DEFAULT, 0 /* fFlags*/, &hProc), VINF_SUCCESS); 529 532 /* Wait for the server thread to terminate. */ 530 int threadRc;533 int rcThread; 531 534 RTTEST_CHECK_RC(hTest, RTThreadWait(hThread, 532 5 * 60 * 1000 /* 5 minutes timeout */, & threadRc), VINF_SUCCESS);533 RTTEST_CHECK_RC_BREAK(hTest, threadRc, VINF_SUCCESS);534 RTTEST_CHECK_RC(hTest, RTLocalIpcServerDestroy( ipcServer), VINF_SUCCESS);535 5 * 60 * 1000 /* 5 minutes timeout */, &rcThread), VINF_SUCCESS); 536 RTTEST_CHECK_RC_BREAK(hTest, rcThread, VINF_SUCCESS); 537 RTTEST_CHECK_RC(hTest, RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 535 538 RTTestPrintf(hTest, RTTESTLVL_INFO, "Server thread terminated successfully\n"); 536 539 /* Check if the child ran successfully. */ … … 569 572 #endif 570 573 571 if (!RTStrICmp(argv[2], "t stRTLocalIpcSessionConnectionFork"))574 if (!RTStrICmp(argv[2], "testSessionConnectionChild")) 572 575 rcExit = testSessionConnectionChild(argc, argv, hTest); 573 576 else if (!RTStrICmp(argv[2], "tstRTLocalIpcSessionWaitFork")) … … 579 582 } 580 583 581 static inttestBasics(void)584 static void testBasics(void) 582 585 { 583 586 RTTestISub("Basics"); 584 587 585 588 /* Server-side. */ 586 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCreate(NULL, NULL, 0), VERR_INVALID_POINTER, 1); 587 RTLOCALIPCSERVER ipcServer; 588 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCreate(&ipcServer, NULL, 0), VERR_INVALID_POINTER, 1); 589 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCreate(&ipcServer, "", 0), VERR_INVALID_PARAMETER, 1); 590 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCreate(&ipcServer, "BasicTest", 0 /* Invalid flags */), VERR_INVALID_PARAMETER, 1); 591 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCreate(&ipcServer, "BasicTest", 1234 /* Invalid flags */), VERR_INVALID_PARAMETER, 1); 592 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCancel(NULL), VERR_INVALID_HANDLE, 1); 593 RTTESTI_CHECK_RC_RET(RTLocalIpcServerDestroy(NULL), VINF_SUCCESS, 1); 589 RTTESTI_CHECK_RC(RTLocalIpcServerCreate(NULL, NULL, 0), VERR_INVALID_POINTER); 590 RTLOCALIPCSERVER hIpcServer; 591 int rc; 592 RTTESTI_CHECK_RC(rc = RTLocalIpcServerCreate(&hIpcServer, NULL, RTLOCALIPC_FLAGS_MULTI_SESSION), VERR_INVALID_POINTER); 593 if (RT_SUCCESS(rc)) RTLocalIpcServerDestroy(hIpcServer); 594 RTTESTI_CHECK_RC(rc = RTLocalIpcServerCreate(&hIpcServer, "", RTLOCALIPC_FLAGS_MULTI_SESSION), VERR_INVALID_NAME); 595 if (RT_SUCCESS(rc)) RTLocalIpcServerDestroy(hIpcServer); 596 RTTESTI_CHECK_RC(rc = RTLocalIpcServerCreate(&hIpcServer, "BasicTest", 1234 /* Invalid flags */), VERR_INVALID_FLAGS); 597 if (RT_SUCCESS(rc)) RTLocalIpcServerDestroy(hIpcServer); 598 599 RTTESTI_CHECK_RC(RTLocalIpcServerCancel(NULL), VERR_INVALID_HANDLE); 600 RTTESTI_CHECK_RC(RTLocalIpcServerDestroy(NULL), VINF_SUCCESS); 601 594 602 /* Basic server creation / destruction. */ 595 RTTESTI_CHECK_RC_RET (RTLocalIpcServerCreate(&ipcServer, "BasicTest", RTLOCALIPC_FLAGS_MULTI_SESSION), VINF_SUCCESS, 1);596 RTTESTI_CHECK_RC _RET(RTLocalIpcServerCancel(ipcServer), VINF_SUCCESS, 1);597 RTTESTI_CHECK_RC _RET(RTLocalIpcServerDestroy(ipcServer), VINF_SUCCESS, 1);603 RTTESTI_CHECK_RC_RETV(RTLocalIpcServerCreate(&hIpcServer, "BasicTest", RTLOCALIPC_FLAGS_MULTI_SESSION), VINF_SUCCESS); 604 RTTESTI_CHECK_RC(RTLocalIpcServerCancel(hIpcServer), VINF_SUCCESS); 605 RTTESTI_CHECK_RC(RTLocalIpcServerDestroy(hIpcServer), VINF_SUCCESS); 598 606 599 607 /* Client-side (per session). */ 600 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionConnect(NULL, NULL, 0), VERR_INVALID_POINTER, 1); 601 RTLOCALIPCSESSION ipcSession; 602 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionConnect(&ipcSession, NULL, 0), VERR_INVALID_POINTER, 1); 603 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionConnect(&ipcSession, "", 0), VERR_INVALID_PARAMETER, 1); 604 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionConnect(&ipcSession, "BasicTest", 1234 /* Invalid flags */), VERR_INVALID_PARAMETER, 1); 605 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionCancel(NULL), VERR_INVALID_HANDLE, 1); 606 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionClose(NULL), VINF_SUCCESS, 1); 608 RTTESTI_CHECK_RC(RTLocalIpcSessionConnect(NULL, NULL, 0), VERR_INVALID_POINTER); 609 RTLOCALIPCSESSION hIpcSession; 610 RTTESTI_CHECK_RC(RTLocalIpcSessionConnect(&hIpcSession, NULL, 0), VERR_INVALID_POINTER); 611 if (RT_SUCCESS(rc)) RTLocalIpcSessionClose(hIpcSession); 612 RTTESTI_CHECK_RC(RTLocalIpcSessionConnect(&hIpcSession, "", 0), VERR_INVALID_NAME); 613 if (RT_SUCCESS(rc)) RTLocalIpcSessionClose(hIpcSession); 614 RTTESTI_CHECK_RC(RTLocalIpcSessionConnect(&hIpcSession, "BasicTest", 1234 /* Invalid flags */), VERR_INVALID_FLAGS); 615 if (RT_SUCCESS(rc)) RTLocalIpcSessionClose(hIpcSession); 616 617 RTTESTI_CHECK_RC(RTLocalIpcSessionCancel(NULL), VERR_INVALID_HANDLE); 618 RTTESTI_CHECK_RC(RTLocalIpcSessionClose(NULL), VINF_SUCCESS); 619 607 620 /* Basic client creation / destruction. */ 608 RTTESTI_CHECK_RC_RET(RTLocalIpcSessionConnect(&ipcSession, "BasicTest", 0), VERR_FILE_NOT_FOUND, 1); 609 RTTESTI_CHECK_RC_RET(RTLocalIpcServerCancel(ipcServer), VERR_INVALID_MAGIC, 1); 610 RTTESTI_CHECK_RC_RET(RTLocalIpcServerDestroy(ipcServer), VERR_INVALID_MAGIC, 1); 611 612 return 0; 621 RTTESTI_CHECK_RC_RETV(rc = RTLocalIpcSessionConnect(&hIpcSession, "BasicTest", 0), VERR_FILE_NOT_FOUND); 622 if (RT_SUCCESS(rc)) RTLocalIpcSessionClose(hIpcSession); 623 RTTESTI_CHECK_RC(RTLocalIpcServerCancel(hIpcServer), VERR_INVALID_HANDLE); 624 RTTESTI_CHECK_RC(RTLocalIpcServerDestroy(hIpcServer), VERR_INVALID_HANDLE); 613 625 } 614 626 … … 630 642 631 643 bool fMayPanic = RTAssertSetMayPanic(false); 632 bool fQuiet = RTAssertSetQuiet( false);644 bool fQuiet = RTAssertSetQuiet(true); 633 645 testBasics(); 634 646 RTAssertSetMayPanic(fMayPanic);
Note:
See TracChangeset
for help on using the changeset viewer.