예제 #1
0
void __LibCRemoveThread( int close_handle )
/***************************************/
{
    thread_data *tdata = NULL;

    if( __NXSlotID != NO_INDEX )
    {
        int ccode = NXKeyGetValue(__NXSlotID, (void **)&tdata);
        if(0 != ccode)
            return;
        #if defined( __RUNTIME_CHECKS__ ) && defined( _M_IX86 )
            if( tdata == (thread_data *)2 )
                return;
        #else
            if( tdata == NULL )
                return;
        #endif
        __RemoveThreadData( tdata->thread_id );
        #if defined( __RUNTIME_CHECKS__ ) && defined( _M_IX86 )
            NXKeySetValue(__NXSlotID, (void *) 2);
        #else
            NXKeySetValue(__NXSlotID, NULL);
        #endif
    }
}
예제 #2
0
void __NTRemoveThread( int close_handle )
/***************************************/
{
    thread_data *tdata;
    HANDLE      thread_handle;

    if( __TlsIndex != NO_INDEX ) {
        tdata = TlsGetValue( __TlsIndex );
    #if defined( __RUNTIME_CHECKS__ ) && defined( _M_IX86 )
        if( tdata == (thread_data *)2 )
            return;
    #else
        if( tdata == NULL )
            return;
    #endif
        thread_handle = tdata->thread_handle;
        __RemoveThreadData( tdata->thread_id );
    #if defined( __RUNTIME_CHECKS__ ) && defined( _M_IX86 )
        TlsSetValue( __TlsIndex, (void*)2 );
    #else
        TlsSetValue( __TlsIndex, NULL );
    #endif
        if( thread_handle != 0 && close_handle ) {
            CloseHandle( thread_handle );
        }
    }
}
예제 #3
0
static void __LibCKeyValueDestructor(void * pPerThreadData)
{
    /* what to do here with the data! */

    thread_data *tdata = (thread_data *) pPerThreadData;

    if(NULL != tdata)
    {
        __RemoveThreadData(tdata->thread_id);
    }
}
예제 #4
0
void __RdosRemoveThread( void )
/*****************************/
{
    thread_data *tdata;
    int thread_handle;

    if( __TlsIndex != NO_INDEX ) {
        tdata = __tls_get_value( __TlsIndex );
        if( tdata == NULL ) return;
        __RemoveThreadData( tdata->thread_id );
        __tls_set_value( __TlsIndex, NULL );
    }
}
예제 #5
0
void __OS2RemoveThread( void )
/****************************/
{
    TID tid;
    tid = *_threadid;
    if( tid <= __MaxThreads ) {
        if( __ThreadData[tid].allocated_entry ) {
            lib_free( __ThreadData[tid].data );
        }
        __ThreadData[tid].data = NULL;
    } else {
        __RemoveThreadData( tid );
    }
}