VirtualBox

Changeset 23124 in vbox for trunk/src


Ignore:
Timestamp:
Sep 18, 2009 11:52:32 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
52517
Message:

IPRT: Added RTThreadIsMain().

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/misc/thread.cpp

    r21337 r23124  
    8989*******************************************************************************/
    9090static void rtThreadDestroy(PRTTHREADINT pThread);
    91 static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, const char *pszName);
     91static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName);
    9292static void rtThreadRemoveLocked(PRTTHREADINT pThread);
    93 static PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, unsigned fIntFlags, const char *pszName);
     93static PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName);
    9494
    9595
     
    141141            rc = rtThreadNativeInit();
    142142            if (RT_SUCCESS(rc))
    143                 rc = rtThreadAdopt(RTTHREADTYPE_DEFAULT, 0, "main");
     143                rc = rtThreadAdopt(RTTHREADTYPE_DEFAULT, 0, RTTHREADINT_FLAGS_MAIN, "main");
    144144            if (RT_SUCCESS(rc))
    145145                rc = rtSchedNativeCalcDefaultPriority(RTTHREADTYPE_DEFAULT);
     
    236236 * No locks are taken or released by this function.
    237237 */
    238 static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, const char *pszName)
     238static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName)
    239239{
    240240    Assert(!(fFlags & RTTHREADFLAGS_WAITABLE));
     
    255255        {
    256256            rtThreadInsert(pThread, NativeThread);
    257             ASMAtomicWriteSize(&pThread->enmState, RTTHREADSTATE_RUNNING);
     257            ASMAtomicWriteSize(&pThread->enmState, RTTHREADSTATE_RUNNING | fIntFlags);
    258258            rtThreadRelease(pThread);
    259259        }
     
    293293
    294294        /* try adopt it */
    295         rc = rtThreadAdopt(enmType, fFlags, pszName);
     295        rc = rtThreadAdopt(enmType, fFlags, 0, pszName);
    296296        Thread = RTThreadSelf();
    297297        Log(("RTThreadAdopt: %RTthrd %RTnthrd '%s' enmType=%d fFlags=%#x rc=%Rrc\n",
     
    320320 * @param   pszName     Pointer to the thread name.
    321321 */
    322 PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, unsigned fIntFlags, const char *pszName)
     322PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName)
    323323{
    324324    PRTTHREADINT pThread = (PRTTHREADINT)RTMemAllocZ(sizeof(RTTHREADINT));
     
    900900}
    901901RT_EXPORT_SYMBOL(RTThreadSetName);
     902
     903
     904/**
     905 * Checks if the specified thread is the main thread.
     906 *
     907 * @returns true if it is, false if it isn't.
     908 *
     909 * @param   hThread     The thread handle.
     910 *
     911 * @remarks This function may not return the correct value when RTR3Init was
     912 *          called on a thread of the than the main one.  This could for
     913 *          instance happen when the DLL/DYLIB/SO containing IPRT is dynamically
     914 *          loaded at run time by a different thread.
     915 */
     916RTDECL(bool) RTThreadIsMain(RTTHREAD hThread)
     917{
     918    PRTTHREADINT pThread = rtThreadGet(hThread);
     919    if (pThread)
     920    {
     921        bool fRc = !!(pThread->fIntFlags & RTTHREADINT_FLAGS_MAIN);
     922        rtThreadRelease(pThread);
     923        return fRc;
     924    }
     925    return false;
     926}
     927RT_EXPORT_SYMBOL(RTThreadIsMain);
    902928
    903929
  • trunk/src/VBox/Runtime/include/internal/thread.h

    r20374 r23124  
    131131/** @copydoc RTTHREADINT_FLAG_IN_TREE_BIT */
    132132#define RTTHREADINT_FLAG_IN_TREE     RT_BIT(RTTHREADINT_FLAG_IN_TREE_BIT)
     133/** Set if it's the main thread. */
     134#define RTTHREADINT_FLAGS_MAIN       RT_BIT(3)
    133135/** @} */
    134136
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