VirtualBox

Changeset 11598 in vbox for trunk/src/libs


Ignore:
Timestamp:
Aug 23, 2008 11:39:13 PM (16 years ago)
Author:
vboxsync
Message:

NSPR: Change the pthread code to use IPRT for threads (TODO: ditto for OS/2). Call RTR3Init from nspr the initialization. (Both changes enclosed in VBOX_USE_IPRT_IN_NSPR.)

Location:
trunk/src/libs/xpcom18a4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/Makefile.kmk

    r11595 r11598  
    7878TEMPLATE_XPCOM_DEFS                = MOZILLA_CLIENT=1 NDEBUG=1 _IMPL_NS_COM \
    7979                                     XPCOM_DLL_BASE=\"$(basename $(notdir $(LIB_XPCOM)))\" \
    80                                      MOZ_DLL_SUFFIX=\"$(suffix $(LIB_XPCOM))\"
     80                                     MOZ_DLL_SUFFIX=\"$(suffix $(LIB_XPCOM))\" \
     81                                     IN_RING3
    8182ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
    8283TEMPLATE_XPCOM_DEFS                               += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
     
    667668        HAVE_STRERROR=1 \
    668669        FORCE_PR_LOG
     670VBox-xpcom-nspr_DEFS      += \
     671        VBOX_USE_IPRT_IN_NSPR
    669672VBox-xpcom-nspr_DEFS.darwin = \
    670673        HAVE_BSD_FLOCK=1 \
     
    11931196
    11941197ifdef IPC_LOGGING
    1195  TEMPLATE_XPCOMIPC_DEFS           += IN_RING3 IPC_LOGGING
     1198 TEMPLATE_XPCOMIPC_DEFS           += IPC_LOGGING
    11961199 TEMPLATE_XPCOMIPC_LIBS            = $(TEMPLATE_XPCOM_LIBS) $(LIB_RUNTIME)
    11971200endif
     
    12031206TEMPLATE_XPCOMIPCEXE_DEFS          = $(TEMPLATE_XPCOMEXE_DEFS) BUILD_DCONNECT="1"
    12041207ifdef IPC_LOGGING
    1205  TEMPLATE_XPCOMIPCEXE_DEFS        += IN_RING3 IPC_LOGGING
     1208 TEMPLATE_XPCOMIPCEXE_DEFS        += IPC_LOGGING
    12061209 TEMPLATE_XPCOMIPCEXE_LIBS         = $(TEMPLATE_XPCOMEXE_LIBS) $(LIB_RUNTIME)
    12071210endif
  • trunk/src/libs/xpcom18a4/nsprpub/pr/src/misc/prinit.c

    r5058 r11598  
    3939#include <ctype.h>
    4040#include <string.h>
     41#ifdef VBOX_USE_IPRT_IN_NSPR
     42# include <iprt/initterm.h>
     43#endif
    4144
    4245PRLogModuleInfo *_pr_clock_lm;
     
    173176    if (_pr_initialized) return;
    174177    _pr_initialized = PR_TRUE;
     178#ifdef VBOX_USE_IPRT_IN_NSPR
     179    RTR3Init(false /* fInitSUPLib */, 0 /* cbReserve */);
     180#endif
    175181#ifdef _PR_ZONE_ALLOCATOR
    176182    _PR_InitZones();
  • trunk/src/libs/xpcom18a4/nsprpub/pr/src/pthreads/ptthread.c

    r1 r11598  
    5353#include <signal.h>
    5454
     55#ifdef VBOX_USE_IPRT_IN_NSPR
     56# include <iprt/thread.h>
     57# include <iprt/mem.h>
     58# include <iprt/asm.h>
     59# include <iprt/err.h>
     60#endif /* VBOX_USE_IPRT_IN_NSPR */
     61
    5562/*
    5663 * Record whether or not we have the privilege to set the scheduling
     
    258265}  /* _pt_root */
    259266
     267#ifdef VBOX_USE_IPRT_IN_NSPR
     268static DECLCALLBACK(int) _pt_iprt_root(
     269    RTTHREAD Thread, void *pvUser)
     270{
     271    PRThread *thred = (PRThread *)pvUser;
     272    _pt_root(thred);
     273    return VINF_SUCCESS;
     274}
     275#endif /* VBOX_USE_IPRT_IN_NSPR */
     276
    260277static PRThread* pt_AttachThread(void)
    261278{
     
    305322    int rv;
    306323    PRThread *thred;
     324#ifndef VBOX_USE_IPRT_IN_NSPR
    307325    pthread_attr_t tattr;
     326#else
     327    static uint32_t volatile s_iThread = 0;
     328    RTTHREADTYPE enmType;
     329    RTTHREAD hThread;
     330    uint32_t fFlags = 0;
     331#endif
    308332
    309333    if (!_pr_initialized) _PR_ImplicitInitialization();
     
    314338        priority = PR_PRIORITY_LAST;
    315339
     340#ifndef VBOX_USE_IPRT_IN_NSPR
    316341    rv = _PT_PTHREAD_ATTR_INIT(&tattr);
    317342    PR_ASSERT(0 == rv);
     
    345370#endif /* !defined(_PR_DCETHREADS) */
    346371    }
    347 
     372#else  /* VBOX_USE_IPRT_IN_NSPR */
     373    /* calc priority */
     374    switch (priority)
     375    {
     376        default:
     377        case PR_PRIORITY_NORMAL:    enmType = RTTHREADTYPE_DEFAULT; break;
     378        case PR_PRIORITY_LOW:       enmType = RTTHREADTYPE_MAIN_HEAVY_WORKER; break;
     379        case PR_PRIORITY_HIGH:      enmType = RTTHREADTYPE_MAIN_WORKER; break;
     380        case PR_PRIORITY_URGENT:    enmType = RTTHREADTYPE_IO; break;
     381    }
     382#endif /* VBOX_USE_IPRT_IN_NSPR */
     383
     384#ifndef VBOX_USE_IPRT_IN_NSPR
    348385    /*
    349386     * DCE threads can't set detach state before creating the thread.
     
    356393    PR_ASSERT(0 == rv);
    357394#endif /* !defined(_PR_DCETHREADS) */
     395#else
     396    if (state == PR_JOINABLE_THREAD)
     397        fFlags |= RTTHREADFLAGS_WAITABLE;
     398#endif /* !VBOX_USE_IPRT_IN_NSPR */
    358399
    359400    if (0 == stackSize) stackSize = (64 * 1024);  /* default == 64K */
     
    361402    if (stackSize < _MD_MINIMUM_STACK_SIZE) stackSize = _MD_MINIMUM_STACK_SIZE;
    362403#endif
     404#ifndef VBOX_USE_IPRT_IN_NSPR
    363405    /*
    364406     * Linux doesn't have pthread_attr_setstacksize.
     
    368410    PR_ASSERT(0 == rv);
    369411#endif
     412#endif /* !VBOX_USE_IPRT_IN_NSPR */
    370413
    371414    thred = PR_NEWZAP(PRThread);
     
    388431                scope = PR_GLOBAL_THREAD;
    389432                       
     433#ifndef VBOX_USE_IPRT_IN_NSPR
    390434        if (PR_GLOBAL_BOUND_THREAD == scope) {
    391435#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING)
     
    404448#endif
    405449                }
     450#endif /* !VBOX_USE_IPRT_IN_NSPR */
    406451        if (PR_GLOBAL_THREAD == scope)
    407452            thred->state |= PT_THREAD_GLOBAL;
     
    443488         * pthread_create() may be doing to its argument.
    444489         */
     490#ifndef VBOX_USE_IPRT_IN_NSPR
    445491        rv = _PT_PTHREAD_CREATE(&id, tattr, _pt_root, thred);
    446492
     
    472518        }
    473519#endif
     520#else  /* VBOX_USE_IPRT_IN_NSPR */
     521                rv = RTThreadCreateF(&hThread, _pt_iprt_root, thred, stackSize, enmType, fFlags, "nspr-%u", ASMAtomicIncU32(&s_iThread));
     522                if (RT_SUCCESS(rv)) {
     523                        id = (pthread_t)RTThreadGetNative(hThread);
     524            rv = 0;
     525        }
     526#endif /* VBOX_USE_IPRT_IN_NSPR */
    474527
    475528        if (0 != rv)
     
    515568
    516569done:
     570#ifndef VBOX_USE_IPRT_IN_NSPR
    517571    rv = _PT_PTHREAD_ATTR_DESTROY(&tattr);
    518572    PR_ASSERT(0 == rv);
     573#endif
    519574
    520575    return thred;
     
    578633    else
    579634    {
     635#ifndef VBOX_USE_IPRT_IN_NSPR
    580636        pthread_t id = thred->id;
    581637        rv = pthread_join(id, &result);
     
    607663            PR_SetError(prerror, rv);
    608664        }
     665#else  /* VBOX_USE_IPRT_IN_NSPR */
     666        rv = VERR_INVALID_HANDLE;
     667        RTTHREAD hThread = RTThreadFromNative((RTNATIVETHREAD)thred->id);
     668        if (hThread != NIL_RTTHREAD)
     669        {
     670            int rcThread = 0;
     671            rv = RTThreadWait(hThread, RT_INDEFINITE_WAIT, &rcThread);
     672            PR_ASSERT(RT_SUCCESS(rv) && rcThread == VINF_SUCCESS);
     673            if (RT_SUCCESS(rv))
     674            {
     675                rv = 0;
     676                _pt_thread_death(thred);
     677            }
     678            else
     679                PR_SetError(rv == VERR_THREAD_NOT_WAITABLE
     680                            ? PR_INVALID_ARGUMENT_ERROR
     681                            : PR_UNKNOWN_ERROR,
     682                            rv);
     683        }
     684#endif /* VBOX_USE_IPRT_IN_NSPR */
    609685    }
    610686    return (0 == rv) ? PR_SUCCESS : PR_FAILURE;
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