VirtualBox

Ignore:
Timestamp:
Aug 7, 2013 9:51:45 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
87772
Message:

Runtime/threadctxhooks: RTThreadCtxHooksAreRegistered().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp

    r47521 r47572  
    299299            }
    300300
     301            bool fRegistered = RTThreadCtxHooksAreRegistered(NIL_RTTHREADCTX);
     302            if (fRegistered)
     303            {
     304                RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksAreRegistered returns true before creating any hooks");
     305                break;
     306            }
     307
    301308            RTTHREADCTX hThreadCtx;
    302309            int rc = RTThreadCtxHooksCreate(&hThreadCtx);
     
    307314                else
    308315                    RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksCreate returns %Rrc", rc);
     316                break;
     317            }
     318
     319            fRegistered = RTThreadCtxHooksAreRegistered(hThreadCtx);
     320            if (fRegistered)
     321            {
     322                RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksAreRegistered returns true before registering any hooks");
     323                RTThreadCtxHooksRelease(hThreadCtx);
    309324                break;
    310325            }
     
    330345            if (RT_FAILURE(rc))
    331346            {
     347                RTThreadPreemptRestore(&PreemptState);
    332348                RTMemFree(pCtxData);
    333349                RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksRegister returns %Rrc", rc);
     
    335351            }
    336352
     353            fRegistered = RTThreadCtxHooksAreRegistered(hThreadCtx);
     354            if (!fRegistered)
     355            {
     356                RTThreadPreemptRestore(&PreemptState);
     357                RTMemFree(pCtxData);
     358                RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksAreRegistered return false when hooks are supposedly registered");
     359                break;
     360            }
     361
    337362            RTThreadPreemptRestore(&PreemptState);
    338363
    339364            /* Check if the preempting callback has/will been invoked. */
    340             const uint32_t  cMsTimeout           = 8000;
     365            const uint32_t  cMsTimeout           = 10000;
    341366            const uint32_t  cMsSleepGranularity  = 50;
    342367            uint32_t        cMsSlept             = 0;
     368            RTCPUID         uCurrentCpuId        = NIL_RTCPUID;
    343369            for (;;)
    344370            {
    345371                RTThreadPreemptDisable(&PreemptState);
    346                 const RTCPUID uCurrentCpuId = RTMpCpuId();
     372                uCurrentCpuId = RTMpCpuId();
    347373                RTThreadPreemptRestore(&PreemptState);
    348374
     
    359385            if (!ASMAtomicReadBool(&pCtxData->fPreemptingInvoked))
    360386            {
    361                 RTStrPrintf(pszErr, cchErr, "!tstR0ThreadCtxHooks[RTTHREADCTXEVENT_PREEMPTING] not invoked after ca. %u ms",
    362                             cMsSlept);
     387                if (pCtxData->uSourceCpuId != uCurrentCpuId)
     388                {
     389                    RTStrPrintf(pszErr, cchErr,
     390                                "!tstR0ThreadCtxHooks[RTTHREADCTXEVENT_PREEMPTING] not invoked before migrating from CPU %RU32 to %RU32",
     391                                pCtxData->uSourceCpuId, uCurrentCpuId);
     392                }
     393                else
     394                {
     395                    RTStrPrintf(pszErr, cchErr, "!tstR0ThreadCtxHooks[RTTHREADCTXEVENT_PREEMPTING] not invoked after ca. %u ms",
     396                                cMsSlept);
     397                }
    363398            }
    364399            else if (!pCtxData->fPreemptingSuccess)
     
    391426            RTThreadCtxHooksDeregister(hThreadCtx);
    392427
     428            fRegistered = RTThreadCtxHooksAreRegistered(hThreadCtx);
     429            if (fRegistered)
     430            {
     431                RTMemFree(pCtxData);
     432                RTStrPrintf(pszErr, cchErr, "!RTThreadCtxHooksAreRegistered return true when hooks are deregistered");
     433                break;
     434            }
     435
    393436            Assert(RTThreadPreemptIsEnabled(NIL_RTTHREAD));
    394437            uint32_t cRefs = RTThreadCtxHooksRelease(hThreadCtx);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette