VirtualBox

Changeset 54362 in vbox


Ignore:
Timestamp:
Feb 23, 2015 1:33:02 AM (10 years ago)
Author:
vboxsync
Message:

thread2-r0drv-solaris.c: thread_join

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/include/internal/thread.h

    r54358 r54362  
    7575     * This is not valid before rtThreadMain has been called by the new thread.  */
    7676    pid_t                   tid;
     77#endif
     78#if defined(RT_OS_SOLARIS) && defined(IN_RING0)
     79    /** Debug thread ID needed for thread_join. */
     80    uint64_t                tid;
    7781#endif
    7882    /** The user event semaphore. */
  • trunk/src/VBox/Runtime/r0drv/solaris/thread2-r0drv-solaris.c

    r54361 r54362  
    8888DECLHIDDEN(void) rtThreadNativeWaitKludge(PRTTHREADINT pThread)
    8989{
    90     kthread_t *pNativeThread = (kthread_t *)pThread->Core.Key;
    91     //thread_join(pNativeThread);
     90    thread_join(pThread->tid);
    9291}
    9392
     
    108107    PRTTHREADINT pThreadInt = (PRTTHREADINT)pvThreadInt;
    109108
     109    /* thread_join takes the t_did value. There seems to be no interface for
     110       retrieving t_did, so we have to gamble on the Solaris guys not messing
     111       up its position in the _kthread struct.  We access t_intr which is
     112       16 bytes earlier in the struct from semeventwait-r0drv-solaris.h, so
     113       maybe we're lucky.  Maybe, but experience indicates that the odds
     114       are against us... */
     115    pThreadInt->tid = curthread->t_did;
     116
    110117    rtThreadMain(pThreadInt, RTThreadNativeSelf(), &pThreadInt->szName[0]);
    111118    thread_exit();
     
    115122DECLHIDDEN(int) rtThreadNativeCreate(PRTTHREADINT pThreadInt, PRTNATIVETHREAD pNativeThread)
    116123{
     124    kthread_t *pThread;
    117125    RT_ASSERT_PREEMPTIBLE();
    118     kthread_t *pThread = thread_create(NULL,                            /* Stack, use base */
    119                                        0,                               /* Stack size */
    120                                        rtThreadNativeMain,              /* Thread function */
    121                                        pThreadInt,                      /* Function data */
    122                                        0,                               /* Data size */
    123                                        (proc_t *)RTR0ProcHandleSelf(),  /* Process handle */
    124                                        TS_RUN,                          /* Ready to run */
    125                                        minclsyspri                      /* Priority */
    126                                        );
     126
     127    pThreadInt->tid = UINT64_MAX;
     128
     129    pThread = thread_create(NULL,                            /* Stack, use base */
     130                            0,                               /* Stack size */
     131                            rtThreadNativeMain,              /* Thread function */
     132                            pThreadInt,                      /* Function data */
     133                            0,                               /* Data size */
     134                            (proc_t *)RTR0ProcHandleSelf(),  /* Process handle */
     135                            TS_RUN,                          /* Ready to run */
     136                            minclsyspri                      /* Priority */
     137                            );
    127138    if (RT_LIKELY(pThread))
    128139    {
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