VirtualBox

Changeset 19936 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 23, 2009 1:58:13 AM (16 years ago)
Author:
vboxsync
Message:

tstR0ThreadPreemption: Improved the RTThreadPreemptIsPending test.

Location:
trunk/src/VBox/Runtime/testcase
Files:
2 edited

Legend:

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

    r19935 r19936  
    8282            if (RTThreadPreemptIsEnabled(NIL_RTTHREAD))
    8383                RTStrPrintf(pszErr, cchErr, "!RTThreadPreemptIsEnabled returns true after RTThreadPreemptDisable");
     84            else if (!(ASMGetFlags() & X86_EFL_IF))
     85                RTStrPrintf(pszErr, cchErr, "!Interrupts disabled");
    8486            RTThreadPreemptRestore(&State);
    8587            break;
     
    8890        case TSTR0THREADPREMEPTION_IS_PENDING:
    8991        {
    90             /* This isn't 100% proof... */
    9192            RTTHREADPREEMPTSTATE State = RTTHREADPREEMPTSTATE_INITIALIZER;
    9293            RTThreadPreemptDisable(&State);
     
    106107                    } while (   !fPending
    107108                             && cNanosElapsed < UINT64_C(60)*1000U*1000U*1000U);
    108                     if (fPending)
     109                    if (!fPending)
     110                        RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %llu loops / %llu ns\n",
     111                                    cLoops, cNanosElapsed);
     112                    else if (cLoops == 1)
     113                        RTStrPrintf(pszErr, cchErr, "!cLoops=0\n");
     114                    else
    109115                        RTStrPrintf(pszErr, cchErr, "RTThreadPreemptIsPending returned true after %llu loops / %llu ns\n",
    110                                     cLoops, cNanosElapsed);
    111                     else
    112                         RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %llu loops / %llu ns\n",
    113116                                    cLoops, cNanosElapsed);
    114117                }
  • trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp

    r19935 r19936  
    4040#include <iprt/string.h>
    4141#include <iprt/test.h>
     42#include <iprt/thread.h>
    4243#ifdef VBOX
    4344# include <VBox/sup.h>
     
    153154     */
    154155    RTTestSub(hTest, "Pending Preemption");
    155     Req.Hdr.u32Magic = SUPR0SERVICEREQHDR_MAGIC;
    156     Req.Hdr.cbReq = sizeof(Req);
    157     Req.szMsg[0] = '\0';
    158     RTTESTI_CHECK_RC(rc = SUPR3CallR0Service("tstR0ThreadPreemption", sizeof("tstR0ThreadPreemption") - 1,
    159                                              TSTR0THREADPREMEPTION_IS_PENDING, 0, &Req.Hdr), VINF_SUCCESS);
    160     RTTESTI_CHECK_MSG(Req.szMsg[0] != '!', ("%s", Req.szMsg));
    161     if (Req.szMsg[0])
    162         RTTestIPrintf(RTTESTLVL_ALWAYS, "%s", Req.szMsg);
     156    for (int i = 0; ; i++)
     157    {
     158        Req.Hdr.u32Magic = SUPR0SERVICEREQHDR_MAGIC;
     159        Req.Hdr.cbReq = sizeof(Req);
     160        Req.szMsg[0] = '\0';
     161        RTTESTI_CHECK_RC(rc = SUPR3CallR0Service("tstR0ThreadPreemption", sizeof("tstR0ThreadPreemption") - 1,
     162                                                 TSTR0THREADPREMEPTION_IS_PENDING, 0, &Req.Hdr), VINF_SUCCESS);
     163        if (    strcmp(Req.szMsg, "cLoops=0\n")
     164            ||  i >= 64)
     165        {
     166            RTTESTI_CHECK_MSG(Req.szMsg[0] != '!', ("%s", Req.szMsg));
     167            if (Req.szMsg[0])
     168                RTTestIPrintf(RTTESTLVL_ALWAYS, "%s", Req.szMsg);
     169            break;
     170        }
     171        if ((i % 3) == 0)
     172            RTThreadYield();
     173    }
    163174
    164175    /*
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