儲存庫 vbox 的更動 39632
圖例:
- 未更動
- 新增
- 刪除
-
trunk/include/iprt/mangling.h
r39612 r39632 1018 1018 # define RTRandU64Ex RT_MANGLER(RTRandU64Ex) 1019 1019 # define RTReqPoolAlloc RT_MANGLER(RTReqPoolAlloc) 1020 # define RTReqPoolCallEx RT_MANGLER(RTReqPoolCallEx) 1021 # define RTReqPoolCallExV RT_MANGLER(RTReqPoolCallExV) 1022 # define RTReqPoolCallWait RT_MANGLER(RTReqPoolCallWait) 1023 # define RTReqPoolCallNoWait RT_MANGLER(RTReqPoolCallNoWait) 1024 # define RTReqPoolCallVoidWait RT_MANGLER(RTReqPoolCallVoidWait) 1025 # define RTReqPoolCallVoidNoWait RT_MANGLER(RTReqPoolCallVoidNoWait) 1020 1026 # define RTReqPoolCreate RT_MANGLER(RTReqPoolCreate) 1027 # define RTReqPoolGetCfgVar RT_MANGLER(RTReqPoolGetCfgVar) 1021 1028 # define RTReqPoolGetStat RT_MANGLER(RTReqPoolGetStat) 1022 # define RTReqPoolQueryCfgVar RT_MANGLER(RTReqPoolQueryCfgVar)1023 1029 # define RTReqPoolRetain RT_MANGLER(RTReqPoolRetain) 1024 1030 # define RTReqPoolRelease RT_MANGLER(RTReqPoolRelease) … … 1031 1037 # define RTReqQueueCreate RT_MANGLER(RTReqQueueCreate) 1032 1038 # define RTReqQueueDestroy RT_MANGLER(RTReqQueueDestroy) 1033 # define RTReqRelease RT_MANGLER(RTReqRelease)1034 # define RTReqRetain RT_MANGLER(RTReqRetain)1035 1039 # define RTReqQueueIsBusy RT_MANGLER(RTReqQueueIsBusy) 1036 1040 # define RTReqQueueProcess RT_MANGLER(RTReqQueueProcess) 1037 1041 # define RTReqSubmit RT_MANGLER(RTReqSubmit) 1042 # define RTReqRelease RT_MANGLER(RTReqRelease) 1043 # define RTReqRetain RT_MANGLER(RTReqRetain) 1038 1044 # define RTReqWait RT_MANGLER(RTReqWait) 1039 1045 # define RTReqGetStatus RT_MANGLER(RTReqGetStatus) -
trunk/include/iprt/req.h
r39620 r39632 87 87 /** Pointer to an RT request packet. */ 88 88 typedef RTREQ *PRTREQ; 89 /** Nil request handle. */ 90 #define NIL_RTREQ ((PRTREQ)0) 89 91 90 92 … … 258 260 RTDECL(int) RTReqQueueAlloc(RTREQQUEUE hQueue, RTREQTYPE enmType, PRTREQ *phReq); 259 261 262 263 /** 264 * Creates a request thread pool. 265 * 266 * The core configuration is given as parameters, finer pool tuning can be 267 * achieved via RTReqPoolSetCfgVar. 268 * 269 * @returns IPRT status code. 270 * @param cMaxThreads The maximum number of worker threads. 271 * UINT32_MAX is an alias for the highest 272 * allowed thread count. 273 * @param cMsMinIdle The number of milliseconds a worker 274 * thread needs to be idle before it is 275 * considered for shutdown. The value 276 * RT_INDEFINITE_WAIT disables automatic 277 * idle thread shutdown. 278 * @param cThreadsPushBackThreshold At which worker thread count the push 279 * back should kick in. 280 * @param cMsMaxPushBack The max number of milliseconds to push 281 * back a submitter. UINT32_MAX is an 282 * alias for the highest allowed push back. 283 * @param pszName The pool name. Keep it short as it is 284 * used for naming worker threads. 285 * @param phPool Where to return the pool handle. 286 */ 287 RTDECL(int) RTReqPoolCreate(uint32_t cMaxThreads, RTMSINTERVAL cMsMinIdle, 288 uint32_t cThreadsPushBackThreshold, uint32_t cMsMaxPushBack, 289 const char *pszName, PRTREQPOOL phPool); 260 290 261 291 /** … … 330 360 * Gets a config variable for a request thread pool. 331 361 * 332 * @returns IPRT status code.362 * @returns The value, UINT64_MAX on invalid parameters. 333 363 * @param hPool The pool handle. 334 364 * @param enmVar The variable to query. 335 * @param puValue Where to return the value. 336 */ 337 RTDECL(int) RTReqPoolQueryCfgVar(RTREQPOOL hPool, RTREQPOOLCFGVAR enmVar, uint64_t *puValue); 365 */ 366 RTDECL(uint64_t) RTReqPoolGetCfgVar(RTREQPOOL hPool, RTREQPOOLCFGVAR enmVar); 338 367 339 368 /** … … 396 425 RTDECL(int) RTReqPoolAlloc(RTREQPOOL hPool, RTREQTYPE enmType, PRTREQ *phReq); 397 426 427 RTDECL(int) RTReqPoolCallEx( RTREQPOOL hPool, RTMSINTERVAL cMillies, PRTREQ *phReq, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, ...); 428 RTDECL(int) RTReqPoolCallExV(RTREQPOOL hPool, RTMSINTERVAL cMillies, PRTREQ *phReq, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, va_list va); 429 430 RTDECL(int) RTReqPoolCallWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...); 431 RTDECL(int) RTReqPoolCallNoWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...); 432 433 RTDECL(int) RTReqPoolCallVoidWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...); 434 RTDECL(int) RTReqPoolCallVoidNoWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...); 435 398 436 399 437 /** -
trunk/src/VBox/Runtime/common/misc/reqpool.cpp
r39621 r39632 108 108 /** Magic value (RTREQPOOL_MAGIC). */ 109 109 uint32_t u32Magic; 110 /** The request pool name. */ 111 char szName[12]; 110 112 111 113 /** @name Config … … 618 620 619 621 622 RTDECL(int) RTReqPoolCreate(uint32_t cMaxThreads, RTMSINTERVAL cMsMinIdle, 623 uint32_t cThreadsPushBackThreshold, uint32_t cMsMaxPushBack, 624 const char *pszName, PRTREQPOOL phPool) 625 { 626 /* 627 * Validate and massage the config. 628 */ 629 if (cMaxThreads == UINT32_MAX) 630 cMaxThreads = RTREQPOOL_MAX_THREADS; 631 AssertMsgReturn(cMaxThreads > 0 && cMaxThreads <= RTREQPOOL_MAX_THREADS, ("%u\n", cMaxThreads), VERR_OUT_OF_RANGE); 632 uint32_t const cMinThreads = cMaxThreads > 2 ? 2 : cMaxThreads - 1; 633 634 if (cThreadsPushBackThreshold == 0) 635 cThreadsPushBackThreshold = cMinThreads; 636 else if (cThreadsPushBackThreshold == UINT32_MAX) 637 cThreadsPushBackThreshold = cMaxThreads; 638 AssertMsgReturn(cThreadsPushBackThreshold <= cMaxThreads, ("%u/%u\n", cThreadsPushBackThreshold, cMaxThreads), VERR_OUT_OF_RANGE); 639 640 if (cMsMaxPushBack == UINT32_MAX) 641 cMsMaxPushBack = RTREQPOOL_PUSH_BACK_MAX_MS; 642 AssertMsgReturn(cMsMaxPushBack <= RTREQPOOL_PUSH_BACK_MAX_MS, ("%llu\n", cMsMaxPushBack), VERR_OUT_OF_RANGE); 643 uint32_t const cMsMinPushBack = cMsMaxPushBack >= 200 ? 100 : cMsMaxPushBack / 2; 644 645 AssertPtrReturn(pszName, VERR_INVALID_POINTER); 646 size_t cchName = strlen(pszName); 647 AssertReturn(cchName > 0, VERR_INVALID_PARAMETER); 648 Assert(cchName <= 10); 649 650 AssertPtrReturn(phPool, VERR_INVALID_POINTER); 651 652 /* 653 * Create and initialize the pool. 654 */ 655 PRTREQPOOLINT pPool = (PRTREQPOOLINT)RTMemAlloc(sizeof(*pPool)); 656 if (!pPool) 657 return VERR_NO_MEMORY; 658 659 pPool->u32Magic = RTREQPOOL_MAGIC; 660 RTStrCopy(pPool->szName, sizeof(pPool->szName), pszName); 661 662 pPool->enmThreadType = RTTHREADTYPE_DEFAULT; 663 pPool->cMaxThreads = cMaxThreads; 664 pPool->cMinThreads = cMinThreads; 665 pPool->cMsMinIdle = cMsMinIdle == RT_INDEFINITE_WAIT || cMsMinIdle >= UINT32_MAX ? UINT32_MAX : cMsMinIdle; 666 pPool->cNsMinIdle = pPool->cMsMinIdle == UINT32_MAX ? UINT64_MAX : cMsMinIdle * RT_NS_1MS_64; 667 pPool->cMsIdleSleep = pPool->cMsMinIdle == UINT32_MAX ? RT_INDEFINITE_WAIT : RT_MAX(RT_MS_1SEC, pPool->cMsMinIdle); 668 pPool->cThreadsPushBackThreshold = cThreadsPushBackThreshold; 669 pPool->cMsMaxPushBack = cMsMaxPushBack; 670 pPool->cMsMinPushBack = cMsMinPushBack; 671 pPool->cMaxFreeRequests = cMaxThreads * 2; 672 pPool->hThreadTermEvt = NIL_RTSEMEVENTMULTI; 673 pPool->fDestructing = false; 674 pPool->cMsCurPushBack = 0; 675 pPool->cCurThreads = 0; 676 pPool->cThreadsCreated = 0; 677 pPool->uLastThreadCreateNanoTs = 0; 678 RTListInit(&pPool->WorkerThreads); 679 pPool->cReqProcessed = 0; 680 pPool->cNsTotalReqProcessing= 0; 681 pPool->cNsTotalReqQueued = 0; 682 pPool->cRefs = 1; 683 pPool->cIdleThreads = 0; 684 RTListInit(&pPool->IdleThreads); 685 pPool->pPendingRequests = NULL; 686 pPool->ppPendingRequests = &pPool->pPendingRequests; 687 pPool->cCurPendingRequests = 0; 688 pPool->cCurActiveRequests = 0; 689 pPool->cReqSubmitted = 0; 690 pPool->pFreeRequests = NULL; 691 pPool->cCurFreeRequests = NULL; 692 693 int rc = RTSemEventMultiCreate(&pPool->hThreadTermEvt); 694 if (RT_SUCCESS(rc)) 695 { 696 rc = RTCritSectInit(&pPool->CritSect); 697 if (RT_SUCCESS(rc)) 698 { 699 *phPool = pPool; 700 return VINF_SUCCESS; 701 } 702 703 RTSemEventMultiDestroy(pPool->hThreadTermEvt); 704 } 705 pPool->u32Magic = RTREQPOOL_MAGIC_DEAD; 706 RTMemFree(pPool); 707 return rc; 708 } 709 710 711 620 712 RTDECL(int) RTReqPoolSetCfgVar(RTREQPOOL hPool, RTREQPOOLCFGVAR enmVar, uint64_t uValue) 621 713 { … … 706 798 707 799 case RTREQPOOLCFGVAR_PUSH_BACK_MIN_MS: 708 AssertMsgBreakStmt(uValue <= RTREQPOOL_PUSH_BACK_MAX_MS, ("%llu\n", uValue), rc = VERR_OUT_OF_RANGE); 800 if (uValue == UINT32_MAX || uValue == UINT64_MAX) 801 uValue = RTREQPOOL_PUSH_BACK_MAX_MS; 802 else 803 AssertMsgBreakStmt(uValue <= RTREQPOOL_PUSH_BACK_MAX_MS, ("%llu\n", uValue), rc = VERR_OUT_OF_RANGE); 709 804 pPool->cMsMinPushBack = (uint32_t)uValue; 710 805 if (pPool->cMsMaxPushBack < pPool->cMsMinPushBack) … … 714 809 715 810 case RTREQPOOLCFGVAR_PUSH_BACK_MAX_MS: 716 AssertMsgBreakStmt(uValue <= RTREQPOOL_PUSH_BACK_MAX_MS, ("%llu\n", uValue), rc = VERR_OUT_OF_RANGE); 811 if (uValue == UINT32_MAX || uValue == UINT64_MAX) 812 uValue = RTREQPOOL_PUSH_BACK_MAX_MS; 813 else 814 AssertMsgBreakStmt(uValue <= RTREQPOOL_PUSH_BACK_MAX_MS, ("%llu\n", uValue), rc = VERR_OUT_OF_RANGE); 717 815 pPool->cMsMaxPushBack = (uint32_t)uValue; 718 816 if (pPool->cMsMinPushBack < pPool->cMsMaxPushBack) … … 766 864 767 865 768 RTDECL( int) RTReqPoolQueryCfgVar(RTREQPOOL hPool, RTREQPOOLCFGVAR enmVar, uint64_t *puValue)866 RTDECL(uint64_t) RTReqPoolGetCfgVar(RTREQPOOL hPool, RTREQPOOLCFGVAR enmVar) 769 867 { 770 868 PRTREQPOOLINT pPool = hPool; 771 AssertPtrReturn(pPool, VERR_INVALID_HANDLE);772 AssertReturn(pPool->u32Magic == RTREQPOOL_MAGIC, VERR_INVALID_HANDLE);773 AssertReturn(enmVar > RTREQPOOLCFGVAR_INVALID && enmVar < RTREQPOOLCFGVAR_END, VERR_INVALID_PARAMETER);869 AssertPtrReturn(pPool, UINT64_MAX); 870 AssertReturn(pPool->u32Magic == RTREQPOOL_MAGIC, UINT64_MAX); 871 AssertReturn(enmVar > RTREQPOOLCFGVAR_INVALID && enmVar < RTREQPOOLCFGVAR_END, UINT64_MAX); 774 872 775 873 RTCritSectEnter(&pPool->CritSect); 776 874 777 int rc = VINF_SUCCESS;875 uint64_t u64; 778 876 switch (enmVar) 779 877 { 780 878 case RTREQPOOLCFGVAR_THREAD_TYPE: 781 *puValue= pPool->enmThreadType;879 u64 = pPool->enmThreadType; 782 880 break; 783 881 784 882 case RTREQPOOLCFGVAR_MIN_THREADS: 785 *puValue= pPool->cMinThreads;883 u64 = pPool->cMinThreads; 786 884 break; 787 885 788 886 case RTREQPOOLCFGVAR_MAX_THREADS: 789 *puValue= pPool->cMaxThreads;887 u64 = pPool->cMaxThreads; 790 888 break; 791 889 792 890 case RTREQPOOLCFGVAR_MS_MIN_IDLE: 793 *puValue= pPool->cMsMinIdle;891 u64 = pPool->cMsMinIdle; 794 892 break; 795 893 796 894 case RTREQPOOLCFGVAR_MS_IDLE_SLEEP: 797 *puValue= pPool->cMsIdleSleep;895 u64 = pPool->cMsIdleSleep; 798 896 break; 799 897 800 898 case RTREQPOOLCFGVAR_PUSH_BACK_THRESHOLD: 801 *puValue= pPool->cThreadsPushBackThreshold;899 u64 = pPool->cThreadsPushBackThreshold; 802 900 break; 803 901 804 902 case RTREQPOOLCFGVAR_PUSH_BACK_MIN_MS: 805 *puValue= pPool->cMsMinPushBack;903 u64 = pPool->cMsMinPushBack; 806 904 break; 807 905 808 906 case RTREQPOOLCFGVAR_PUSH_BACK_MAX_MS: 809 *puValue= pPool->cMsMaxPushBack;907 u64 = pPool->cMsMaxPushBack; 810 908 break; 811 909 812 910 case RTREQPOOLCFGVAR_MAX_FREE_REQUESTS: 813 *puValue= pPool->cMaxFreeRequests;911 u64 = pPool->cMaxFreeRequests; 814 912 break; 815 913 816 914 default: 817 915 AssertFailed(); 818 rc = VERR_IPE_NOT_REACHED_DEFAULT_CASE; 819 *puValue = UINT64_MAX; 916 u64 = UINT64_MAX; 820 917 break; 821 918 } … … 823 920 RTCritSectLeave(&pPool->CritSect); 824 921 825 return rc;826 } 827 RT_EXPORT_SYMBOL(RTReq PoolQueryCfgVar);922 return u64; 923 } 924 RT_EXPORT_SYMBOL(RTReqGetQueryCfgVar); 828 925 829 926 … … 939 1036 } 940 1037 941 /* Finally, free the handle. */ 1038 /* Finally, free the critical section and pool instance. */ 1039 RTCritSectLeave(&pPool->CritSect); 1040 RTCritSectDelete(&pPool->CritSect); 942 1041 RTMemFree(pPool); 943 1042 } … … 992 1091 RT_EXPORT_SYMBOL(RTReqPoolAlloc); 993 1092 1093 1094 RTDECL(int) RTReqPoolCallEx( RTREQPOOL hPool, RTMSINTERVAL cMillies, PRTREQ *phReq, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, ...) 1095 { 1096 va_list va; 1097 va_start(va, cArgs); 1098 int rc = RTReqPoolCallExV(hPool, cMillies, phReq, fFlags, pfnFunction, cArgs, va); 1099 va_end(va); 1100 return rc; 1101 } 1102 RT_EXPORT_SYMBOL(RTReqPoolCallEx); 1103 1104 1105 RTDECL(int) RTReqPoolCallExV(RTREQPOOL hPool, RTMSINTERVAL cMillies, PRTREQ *phReq, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, va_list va) 1106 { 1107 /* 1108 * Check input. 1109 */ 1110 AssertPtrReturn(pfnFunction, VERR_INVALID_POINTER); 1111 AssertMsgReturn(!((uint32_t)fFlags & ~(uint32_t)(RTREQFLAGS_NO_WAIT | RTREQFLAGS_RETURN_MASK)), ("%#x\n", (uint32_t)fFlags), VERR_INVALID_PARAMETER); 1112 if (!(fFlags & RTREQFLAGS_NO_WAIT)) 1113 { 1114 AssertPtrReturn(phReq, VERR_INVALID_POINTER); 1115 *phReq = NIL_RTREQ; 1116 } 1117 1118 PRTREQINT pReq = NULL; 1119 AssertMsgReturn(cArgs * sizeof(uintptr_t) <= sizeof(pReq->u.Internal.aArgs), ("cArgs=%u\n", cArgs), VERR_TOO_MUCH_DATA); 1120 1121 /* 1122 * Allocate and initialize the request. 1123 */ 1124 int rc = RTReqPoolAlloc(hPool, RTREQTYPE_INTERNAL, &pReq); 1125 if (RT_FAILURE(rc)) 1126 return rc; 1127 pReq->fFlags = fFlags; 1128 pReq->u.Internal.pfn = pfnFunction; 1129 pReq->u.Internal.cArgs = cArgs; 1130 for (unsigned iArg = 0; iArg < cArgs; iArg++) 1131 pReq->u.Internal.aArgs[iArg] = va_arg(va, uintptr_t); 1132 1133 /* 1134 * Submit the request. 1135 */ 1136 rc = RTReqSubmit(pReq, cMillies); 1137 if ( rc != VINF_SUCCESS 1138 && rc != VERR_TIMEOUT) 1139 { 1140 Assert(rc != VERR_INTERRUPTED); 1141 RTReqRelease(pReq); 1142 pReq = NULL; 1143 } 1144 1145 if (!(fFlags & RTREQFLAGS_NO_WAIT)) 1146 { 1147 *phReq = pReq; 1148 LogFlow(("RTReqPoolCallExV: returns %Rrc *phReq=%p\n", rc, pReq)); 1149 } 1150 else 1151 LogFlow(("RTReqPoolCallExV: returns %Rrc\n", rc)); 1152 return rc; 1153 } 1154 RT_EXPORT_SYMBOL(RTReqPoolCallExV); 1155 1156 1157 RTDECL(int) RTReqPoolCallWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...) 1158 { 1159 PRTREQINT pReq; 1160 va_list va; 1161 va_start(va, cArgs); 1162 int rc = RTReqPoolCallExV(hPool, RT_INDEFINITE_WAIT, &pReq, RTREQFLAGS_IPRT_STATUS, 1163 pfnFunction, cArgs, va); 1164 va_end(va); 1165 if (RT_SUCCESS(rc)) 1166 rc = pReq->iStatusX; 1167 RTReqRelease(pReq); 1168 return rc; 1169 } 1170 RT_EXPORT_SYMBOL(RTReqPoolCallWait); 1171 1172 1173 RTDECL(int) RTReqPoolCallNoWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...) 1174 { 1175 va_list va; 1176 va_start(va, cArgs); 1177 int rc = RTReqPoolCallExV(hPool, 0, NULL, RTREQFLAGS_IPRT_STATUS | RTREQFLAGS_NO_WAIT, 1178 pfnFunction, cArgs, va); 1179 va_end(va); 1180 return rc; 1181 } 1182 RT_EXPORT_SYMBOL(RTReqPoolCallNoWait); 1183 1184 1185 RTDECL(int) RTReqPoolCallVoidWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...) 1186 { 1187 PRTREQINT pReq; 1188 va_list va; 1189 va_start(va, cArgs); 1190 int rc = RTReqPoolCallExV(hPool, RT_INDEFINITE_WAIT, &pReq, RTREQFLAGS_VOID, 1191 pfnFunction, cArgs, va); 1192 va_end(va); 1193 if (RT_SUCCESS(rc)) 1194 rc = pReq->iStatusX; 1195 RTReqRelease(pReq); 1196 return rc; 1197 } 1198 RT_EXPORT_SYMBOL(RTReqPoolCallVoidWait); 1199 1200 1201 RTDECL(int) RTReqPoolCallVoidNoWait(RTREQPOOL hPool, PFNRT pfnFunction, unsigned cArgs, ...) 1202 { 1203 va_list va; 1204 va_start(va, cArgs); 1205 int rc = RTReqPoolCallExV(hPool, 0, NULL, RTREQFLAGS_VOID | RTREQFLAGS_NO_WAIT, 1206 pfnFunction, cArgs, va); 1207 va_end(va); 1208 return rc; 1209 } 1210 RT_EXPORT_SYMBOL(RTReqPoolCallVoidNoWait); 1211 -
trunk/src/VBox/Runtime/testcase/Makefile.kmk
r39448 r39632 65 65 tstFileLock \ 66 66 tstFork \ 67 tstRTFsQueries \ 67 68 tstRTGetOpt \ 68 69 tstRTGetOptArgv \ … … 92 93 tstPrfRT \ 93 94 tstRand \ 94 tstRT FsQueries\95 tstRTReqPool \ 95 96 tstRTSemEventMulti \ 96 97 tstSemMutex \ … … 216 217 tstRTDigest_SOURCES = tstRTDigest.cpp 217 218 219 tstDir_TEMPLATE = VBOXR3TSTEXE 218 220 tstDir_SOURCES = tstDir.cpp 219 221 222 tstDir-2_TEMPLATE = VBOXR3TSTEXE 220 223 tstDir-2_SOURCES = tstDir-2.cpp 221 224 225 tstDir-3_TEMPLATE = VBOXR3TSTEXE 222 226 tstDir-3_SOURCES = tstDir-3.cpp 223 227 228 tstRTDvm_TEMPLATE = VBOXR3TSTEXE 224 229 tstRTDvm_SOURCES = tstRTDvm.cpp 225 230 231 tstEnv_TEMPLATE = VBOXR3TSTEXE 226 232 tstEnv_SOURCES = tstEnv.cpp 227 233 … … 231 237 tstErrUnique.cpp_DEPS = $(IPRT_OUT_DIR)/errmsgdata.h 232 238 239 tstFile_TEMPLATE = VBOXR3TSTEXE 233 240 tstFile_SOURCES = tstFile.cpp 234 241 … … 242 249 tstRTFileGetSize-1_SOURCES = tstRTFileGetSize-1.cpp 243 250 251 tstFileAppendWin-1_TEMPLATE = VBOXR3TSTEXE 244 252 tstFileAppendWin-1_SOURCES = tstFileAppendWin-1.cpp 245 253 254 tstFileLock_TEMPLATE = VBOXR3TSTEXE 246 255 tstFileLock_SOURCES = tstFileLock.cpp 247 256 257 tstFork_TEMPLATE = VBOXR3TSTEXE 248 258 tstFork_SOURCES = tstFork.cpp 259 260 tstRTFsQueries_TEMPLATE = VBOXR3TSTEXE 261 tstRTFsQueries_SOURCES = tstRTFsQueries.cpp 249 262 250 263 tstRTGetOpt_TEMPLATE = VBOXR3TSTEXE … … 262 275 tstRTHeapSimple_SOURCES = tstRTHeapSimple.cpp 263 276 277 tstIoCtl_TEMPLATE = VBOXR3TSTEXE 264 278 tstIoCtl_SOURCES = tstIoCtl.cpp 265 279 … … 283 297 tstIprtMiniString_SOURCES = tstIprtMiniString.cpp 284 298 299 tstLdr_TEMPLATE = VBOXR3TSTEXE 285 300 tstLdr_SOURCES = tstLdr.cpp 286 301 302 tstLdr-2_TEMPLATE = VBOXR3TSTEXE 287 303 tstLdr-2_SOURCES = tstLdr-2.cpp 288 304 tstLdr-2_DEFS = IN_DIS … … 315 331 endif # VBOX_WITH_RAW_MODE 316 332 333 tstLdr-3_TEMPLATE = VBOXR3TSTEXE 317 334 tstLdr-3_SOURCES = tstLdr-3.cpp 318 335 tstLdr-3_DEFS = IN_DIS … … 355 372 endif 356 373 374 tstLdr-4_TEMPLATE = VBOXR3TSTEXE 357 375 tstLdr-4_SOURCES = tstLdr-4.cpp tstLdrDisasmTest.cpp 358 376 tstLdr-4_DEFS = IN_DIS … … 360 378 $(PATH_STAGE_LIB)/DisasmR3$(VBOX_SUFF_LIB) 361 379 380 tstLdrLoad_TEMPLATE = VBOXR3TSTEXE 362 381 tstLdrLoad_SOURCES = tstLdrLoad.cpp 363 382 … … 368 387 tstRTLockValidator_SOURCES = tstRTLockValidator.cpp 369 388 389 tstLog_TEMPLATE = VBOXR3TSTEXE 370 390 tstLog_SOURCES = tstLog.cpp 371 391 392 tstMemAutoPtr_TEMPLATE = VBOXR3TSTEXE 372 393 tstMemAutoPtr_SOURCES = tstMemAutoPtr.cpp 373 394 … … 381 402 tstRTMemPool_SOURCES = tstRTMemPool.cpp 382 403 404 tstMove_TEMPLATE = VBOXR3TSTEXE 383 405 tstMove_SOURCES = tstMove.cpp 384 406 407 tstMp-1_TEMPLATE = VBOXR3TSTEXE 385 408 tstMp-1_SOURCES = tstMp-1.cpp 386 409 410 tstNoCrt-1_TEMPLATE = VBOXR3TSTEXE 387 411 tstNoCrt-1_DEFS = RT_WITHOUT_NOCRT_WRAPPER_ALIASES 388 412 tstNoCrt-1_SOURCES = \ … … 399 423 ../common/string/strlen.asm 400 424 425 tstOnce_TEMPLATE = VBOXR3TSTEXE 401 426 tstOnce_SOURCES = tstOnce.cpp 402 427 … … 410 435 tstRTPoll_SOURCES = tstRTPoll.cpp 411 436 437 tstPrfRT_TEMPLATE = VBOXR3TSTEXE 412 438 tstPrfRT_SOURCES = tstPrfRT.cpp 413 414 tstRand_SOURCES = tstRand.cpp415 416 tstRTFsQueries_SOURCES = tstRTFsQueries.cpp417 439 418 440 tstRTPrfIO_TEMPLATE = VBOXR3TSTEXE … … 422 444 tstRTProcCreateEx_SOURCES = tstRTProcCreateEx.cpp 423 445 446 tstRTProcWait_TEMPLATE = VBOXR3TSTEXE 424 447 tstRTProcWait_SOURCES = tstRTProcWait.cpp 425 448 449 tstRTProcIsRunningByName_TEMPLATE = VBOXR3TSTEXE 426 450 tstRTProcIsRunningByName_SOURCES = tstRTProcIsRunningByName.cpp 427 451 452 tstRand_TEMPLATE = VBOXR3TSTEXE 453 tstRand_SOURCES = tstRand.cpp 454 455 tstRTReqPool_TEMPLATE = VBOXR3TSTEXE 456 tstRTReqPool_SOURCES = tstRTReqPool.cpp 457 458 tstRTS3_TEMPLATE = VBOXR3TSTEXE 428 459 tstRTS3_SOURCES = tstRTS3.cpp 429 460 461 tstSemMutex_TEMPLATE = VBOXR3TSTEXE 430 462 tstSemMutex_SOURCES = tstSemMutex.cpp 431 463 … … 436 468 tstRTSemRW_SOURCES = tstRTSemRW.cpp 437 469 470 tstSemPingPong_TEMPLATE = VBOXR3TSTEXE 438 471 tstSemPingPong_SOURCES = tstSemPingPong.cpp 439 472 … … 456 489 tstRTStrFormat_SOURCES = tstRTStrFormat.cpp 457 490 491 tstStrSimplePattern_TEMPLATE = VBOXR3TSTEXE 458 492 tstStrSimplePattern_SOURCES = tstStrSimplePattern.cpp 459 493 494 tstStrToNum_TEMPLATE = VBOXR3TSTEXE 460 495 tstStrToNum_SOURCES = tstStrToNum.cpp 461 496 … … 481 516 tstRTDirCreateUniqueNumbered_SOURCES = tstRTDirCreateUniqueNumbered.cpp 482 517 518 tstTermCallbacks_TEMPLATE = VBOXR3TSTEXE 483 519 tstTermCallbacks_SOURCES = tstTermCallbacks.cpp 484 520 521 tstThread-1_TEMPLATE = VBOXR3TSTEXE 485 522 tstThread-1_SOURCES = tstThread-1.cpp 486 523 … … 491 528 tstRTThreadExecutionTime_SOURCES = tstRTThreadExecutionTime.cpp 492 529 530 tstTime_TEMPLATE = VBOXR3TSTEXE 493 531 tstTime_SOURCES = tstTime.cpp 494 532 533 tstTime-2_TEMPLATE = VBOXR3TSTEXE 495 534 tstTime-2_SOURCES = tstTime-2.cpp 496 535 536 tstTime-3_TEMPLATE = VBOXR3TSTEXE 497 537 tstTime-3_SOURCES = tstTime-3.cpp 498 538 539 tstTime-4_TEMPLATE = VBOXR3TSTEXE 499 540 tstTime-4_SOURCES = tstTime-4.cpp 500 541 542 tstTimer_TEMPLATE = VBOXR3TSTEXE 501 543 tstTimer_SOURCES = tstTimer.cpp 502 544 545 tstTimerLR_TEMPLATE = VBOXR3TSTEXE 503 546 tstTimerLR_SOURCES = tstTimerLR.cpp 504 547 … … 512 555 tstRTUuid_SOURCES = tstRTUuid.cpp 513 556 557 tstUtf8_TEMPLATE = VBOXR3TSTEXE 514 558 tstUtf8_SOURCES = tstUtf8.cpp 515 559 … … 591 635 # 592 636 637 tstDarwinSched_TEMPLATE = VBOXR3TSTEXE 593 638 tstDarwinSched_SOURCES = tstDarwinSched.cpp 594 639 -
trunk/src/VBox/Runtime/testcase/tstRTDvm.cpp
r37270 r39632 29 29 * Header Files * 30 30 *******************************************************************************/ 31 #include <iprt/initterm.h> 31 #include <iprt/dvm.h> 32 32 33 #include <iprt/err.h> 33 34 #include <iprt/test.h> 34 #include <iprt/dvm.h>35 35 #include <iprt/file.h> 36 36 #include <iprt/string.h> 37 37 38 39 /******************************************************************************* 40 * Structures and Typedefs * 41 *******************************************************************************/ 38 42 /** 39 43 * Disk structure. … … 53 57 } TSTRTDVMDISK, *PTSTRTDVMDISK; 54 58 59 60 55 61 static int dvmDiskRead(void *pvUser, uint64_t off, void *pvBuf, size_t cbRead) 56 62 { … … 59 65 if (pDisk->fUseImage) 60 66 return RTFileReadAt(pDisk->hImage, off, pvBuf, cbRead, NULL); 61 else 62 return RTDvmVolumeRead(pDisk->hVol, off, pvBuf, cbRead); 67 return RTDvmVolumeRead(pDisk->hVol, off, pvBuf, cbRead); 63 68 } 64 69 … … 69 74 if (pDisk->fUseImage) 70 75 return RTFileWriteAt(pDisk->hImage, off, pvBuf, cbWrite, NULL); 71 else 72 return RTDvmVolumeWrite(pDisk->hVol, off, pvBuf, cbWrite); 76 return RTDvmVolumeWrite(pDisk->hVol, off, pvBuf, cbWrite); 73 77 } 74 78 … … 78 82 int rc = VINF_SUCCESS; 79 83 80 memset(szPrefix, 0, sizeof(szPrefix));84 RT_ZERO(szPrefix); 81 85 82 86 if (cNesting < sizeof(szPrefix) - 1) … … 103 107 return RTTestSummaryAndDestroy(hTest); 104 108 } 105 elseif (rc == VERR_NOT_SUPPORTED)109 if (rc == VERR_NOT_SUPPORTED) 106 110 return VINF_SUCCESS; 107 111
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器