VirtualBox

Changeset 45182 in vbox for trunk/src


Ignore:
Timestamp:
Mar 26, 2013 2:27:59 AM (12 years ago)
Author:
vboxsync
Message:

tstSupSem.cpp: VERR_INTERRUPT is a valid return code for the SUPSem*Wait APIs. Seeing 0-2 of them in each run on mac os x 10.7.x

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp

    r44528 r45182  
    288288
    289289    {
     290
     291#define LOOP_COUNT 20
    290292        static unsigned const s_acMsIntervals[] = { 0, 1, 2, 3, 4, 8, 10, 16, 32 };
    291293        if (RTTestErrorCount(hTest) == 0)
     
    294296            RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);
    295297
     298            uint32_t cInterrupted = 0;
    296299            for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++)
    297300            {
     
    301304                uint64_t cNsTotalSys= 0;
    302305                uint64_t cNsTotal   = 0;
    303                 for (unsigned j = 0; j < 10; j++)
     306                unsigned cLoops     = 0;
     307                while (cLoops < LOOP_COUNT)
    304308                {
    305309                    uint64_t u64StartSys = RTTimeSystemNanoTS();
    306310                    uint64_t u64Start    = RTTimeNanoTS();
    307311                    int rcX = SUPSemEventWaitNoResume(pSession, hEvent, cMs);
    308                     if (rcX != VERR_TIMEOUT)
    309                         RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs);
    310312                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    311313                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     314
     315                    if (rcX == VERR_INTERRUPTED)
     316                    {
     317                        cInterrupted++;
     318                        continue; /* retry */
     319                    }
     320                    if (rcX != VERR_TIMEOUT)
     321                        RTTestFailed(hTest, "%Rrc cLoops=%u cMs=%u", rcX, cLoops, cMs);
     322
    312323                    if (cNsElapsedSys < cNsMinSys)
    313324                        cNsMinSys = cNsElapsedSys;
     
    316327                    cNsTotalSys += cNsElapsedSys;
    317328                    cNsTotal    += cNsElapsed;
     329                    cLoops++;
    318330                }
    319331                if (fSys)
    320332                {
    321                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%u ms min (clock=sys)", cMs);
    322                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs);
     333                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%u ms min (clock=sys)", cMs);
     334                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs);
    323335                }
    324336                if (fGip)
    325337                {
    326                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%u ms min (clock=gip)", cMs);
    327                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%u ms avg (clock=gip)", cMs);
     338                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%u ms min (clock=gip)", cMs);
     339                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%u ms avg (clock=gip)", cMs);
    328340                }
    329341            }
    330342
    331343            RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     344            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    332345        }
    333346
     
    337350            RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS);
    338351
     352            uint32_t cInterrupted = 0;
    339353            for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++)
    340354            {
     
    344358                uint64_t cNsTotalSys= 0;
    345359                uint64_t cNsTotal   = 0;
    346                 for (unsigned j = 0; j < 10; j++)
     360                unsigned cLoops     = 0;
     361                while (cLoops < LOOP_COUNT)
    347362                {
    348363                    uint64_t u64StartSys = RTTimeSystemNanoTS();
    349364                    uint64_t u64Start    = RTTimeNanoTS();
    350365                    int rcX = SUPSemEventMultiWaitNoResume(pSession, hEvent, cMs);
    351                     if (rcX != VERR_TIMEOUT)
    352                         RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs);
    353366                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    354367                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     368
     369                    if (rcX == VERR_INTERRUPTED)
     370                    {
     371                        cInterrupted++;
     372                        continue; /* retry */
     373                    }
     374                    if (rcX != VERR_TIMEOUT)
     375                        RTTestFailed(hTest, "%Rrc cLoops=%u cMs=%u", rcX, cLoops, cMs);
     376
    355377                    if (cNsElapsedSys < cNsMinSys)
    356378                        cNsMinSys = cNsElapsedSys;
     
    359381                    cNsTotalSys += cNsElapsedSys;
    360382                    cNsTotal    += cNsElapsed;
     383                    cLoops++;
    361384                }
    362385                if (fSys)
    363386                {
    364                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%u ms min (clock=sys)", cMs);
    365                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs);
     387                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%u ms min (clock=sys)", cMs);
     388                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs);
    366389                }
    367390                if (fGip)
    368391                {
    369                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%u ms min (clock=gip)", cMs);
    370                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%u ms avg (clock=gip)", cMs);
     392                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%u ms min (clock=gip)", cMs);
     393                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%u ms avg (clock=gip)", cMs);
    371394                }
    372395            }
    373396
    374397            RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     398            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    375399        }
    376400    }
     
    388412            RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);
    389413
     414            uint32_t cInterrupted = 0;
    390415            for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++)
    391416            {
     
    395420                uint64_t cNsTotalSys= 0;
    396421                uint64_t cNsTotal   = 0;
    397                 for (unsigned j = 0; j < 10; j++)
     422                unsigned cLoops     = 0;
     423                while (cLoops < LOOP_COUNT)
    398424                {
    399425                    uint64_t u64StartSys = RTTimeSystemNanoTS();
    400426                    uint64_t u64Start    = RTTimeNanoTS();
    401427                    int rcX = SUPSemEventWaitNsRelIntr(pSession, hEvent, cNs);
    402                     if (rcX != VERR_TIMEOUT)
    403                         RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs);
    404428                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    405429                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     430
     431                    if (rcX == VERR_INTERRUPTED)
     432                    {
     433                        cInterrupted++;
     434                        continue; /* retry */
     435                    }
     436                    if (rcX != VERR_TIMEOUT)
     437                        RTTestFailed(hTest, "%Rrc cLoops=%u cNs=%u", rcX, cLoops, cNs);
     438
    406439                    if (cNsElapsedSys < cNsMinSys)
    407440                        cNsMinSys = cNsElapsedSys;
     
    410443                    cNsTotalSys += cNsElapsedSys;
    411444                    cNsTotal    += cNsElapsed;
     445                    cLoops++;
    412446                }
    413447                if (fSys)
    414448                {
    415                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%'u ns min (clock=sys)", cNs);
    416                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
     449                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%'u ns min (clock=sys)", cNs);
     450                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
    417451                }
    418452                if (fGip)
    419453                {
    420                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%'u ns min (clock=gip)", cNs);
    421                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
     454                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%'u ns min (clock=gip)", cNs);
     455                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
    422456                }
    423457            }
    424458
    425459            RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     460            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    426461        }
    427462
     
    432467            RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS);
    433468
     469            uint32_t cInterrupted = 0;
    434470            for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++)
    435471            {
     
    439475                uint64_t cNsTotalSys= 0;
    440476                uint64_t cNsTotal   = 0;
    441                 for (unsigned j = 0; j < 10; j++)
     477                unsigned cLoops     = 0;
     478                while (cLoops < LOOP_COUNT)
    442479                {
    443480                    uint64_t u64StartSys = RTTimeSystemNanoTS();
    444481                    uint64_t u64Start    = RTTimeNanoTS();
    445482                    int rcX = SUPSemEventMultiWaitNsRelIntr(pSession, hEvent, cNs);
    446                     if (rcX != VERR_TIMEOUT)
    447                         RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs);
    448483                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    449484                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     485
     486                    if (rcX == VERR_INTERRUPTED)
     487                    {
     488                        cInterrupted++;
     489                        continue; /* retry */
     490                    }
     491                    if (rcX != VERR_TIMEOUT)
     492                        RTTestFailed(hTest, "%Rrc cLoops=%u cNs=%u", rcX, cLoops, cNs);
     493
    450494                    if (cNsElapsedSys < cNsMinSys)
    451495                        cNsMinSys = cNsElapsedSys;
     
    454498                    cNsTotalSys += cNsElapsedSys;
    455499                    cNsTotal    += cNsElapsed;
     500                    cLoops++;
    456501                }
    457502                if (fSys)
    458503                {
    459                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%'u ns min (clock=sys)", cNs);
    460                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
     504                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%'u ns min (clock=sys)", cNs);
     505                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
    461506                }
    462507                if (fGip)
    463508                {
    464                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%'u ns min (clock=gip)", cNs);
    465                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
     509                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%'u ns min (clock=gip)", cNs);
     510                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
    466511                }
    467512            }
    468513
    469514            RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     515            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    470516        }
    471517
     
    476522            RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);
    477523
     524            uint32_t cInterrupted = 0;
    478525            for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++)
    479526            {
     
    483530                uint64_t cNsTotalSys= 0;
    484531                uint64_t cNsTotal   = 0;
    485                 for (unsigned j = 0; j < 10; j++)
     532                unsigned cLoops     = 0;
     533                while (cLoops < LOOP_COUNT)
    486534                {
    487535                    uint64_t u64StartSys   = RTTimeSystemNanoTS();
     
    489537                    uint64_t uAbsDeadline  = (fGip ? u64Start : u64StartSys) + cNs;
    490538                    int rcX = SUPSemEventWaitNsAbsIntr(pSession, hEvent, uAbsDeadline);
    491                     if (rcX != VERR_TIMEOUT)
    492                         RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs);
    493539                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    494540                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     541
     542                    if (rcX == VERR_INTERRUPTED)
     543                    {
     544                        cInterrupted++;
     545                        continue; /* retry */
     546                    }
     547                    if (rcX != VERR_TIMEOUT)
     548                        RTTestFailed(hTest, "%Rrc cLoops=%u cNs=%u", rcX, cLoops, cNs);
     549
    495550                    if (cNsElapsedSys < cNsMinSys)
    496551                        cNsMinSys = cNsElapsedSys;
     
    499554                    cNsTotalSys += cNsElapsedSys;
    500555                    cNsTotal    += cNsElapsed;
     556                    cLoops++;
    501557                }
    502558                if (fSys)
    503559                {
    504                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%'u ns min (clock=sys)", cNs);
    505                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
     560                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%'u ns min (clock=sys)", cNs);
     561                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
    506562                }
    507563                if (fGip)
    508564                {
    509                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%'u ns min (clock=gip)", cNs);
    510                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
     565                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%'u ns min (clock=gip)", cNs);
     566                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
    511567                }
    512568            }
    513569
    514570            RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     571            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    515572        }
    516573
     
    522579            RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS);
    523580
     581            uint32_t cInterrupted = 0;
    524582            for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++)
    525583            {
     
    529587                uint64_t cNsTotalSys= 0;
    530588                uint64_t cNsTotal   = 0;
    531                 for (unsigned j = 0; j < 10; j++)
     589                unsigned cLoops     = 0;
     590                while (cLoops < LOOP_COUNT)
    532591                {
    533592                    uint64_t u64StartSys   = RTTimeSystemNanoTS();
     
    535594                    uint64_t uAbsDeadline  = (fGip ? u64Start : u64StartSys) + cNs;
    536595                    int rcX = SUPSemEventMultiWaitNsAbsIntr(pSession, hEvent, uAbsDeadline);
    537                     if (rcX != VERR_TIMEOUT)
    538                         RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs);
    539596                    uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys;
    540597                    uint64_t cNsElapsed    = RTTimeNanoTS()       - u64Start;
     598
     599                    if (rcX == VERR_INTERRUPTED)
     600                    {
     601                        cInterrupted++;
     602                        continue; /* retry */
     603                    }
     604                    if (rcX != VERR_TIMEOUT)
     605                        RTTestFailed(hTest, "%Rrc cLoops=%u cNs=%u", rcX, cLoops, cNs);
     606
    541607                    if (cNsElapsedSys < cNsMinSys)
    542608                        cNsMinSys = cNsElapsedSys;
     
    545611                    cNsTotalSys += cNsElapsedSys;
    546612                    cNsTotal    += cNsElapsed;
     613                    cLoops++;
    547614                }
    548615                if (fSys)
    549616                {
    550                     RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,        "%'u ns min (clock=sys)", cNs);
    551                     RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
     617                    RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS,            "%'u ns min (clock=sys)", cNs);
     618                    RTTestValueF(hTest, cNsTotalSys / cLoops, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs);
    552619                }
    553620                if (fGip)
    554621                {
    555                     RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,           "%'u ns min (clock=gip)", cNs);
    556                     RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
     622                    RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS,               "%'u ns min (clock=gip)", cNs);
     623                    RTTestValueF(hTest, cNsTotal / cLoops, RTTESTUNIT_NS,    "%'u ns avg (clock=gip)", cNs);
    557624                }
    558625            }
    559626
    560627            RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED);
     628            RTTestValueF(hTest, cInterrupted, RTTESTUNIT_OCCURRENCES, "VERR_INTERRUPTED returned", cInterrupted);
    561629        }
    562630
Note: See TracChangeset for help on using the changeset viewer.

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