Esempio n. 1
0
void FreeDebug( struct TDebug *obj )
{
    free( obj->FProgram );
    free( obj->FParam );
    free( obj->FStartDir );

    RdosCloseWait( obj->UserWait );
    RdosFreeSignal( obj->UserSignal );
    RdosDeleteSection( obj->FSection );
}
Esempio n. 2
0
int __CBeginThread( thread_fn *start_addr, int prio, const char *thread_name,
                         unsigned stack_size, void *arglist )
/************************************************************/
{
    thread_args *td;
    int         th;
    int         wait_handle;

    if( __TlsIndex == NO_INDEX ) {
        if( !__RdosThreadInit() )
            return( -1L );
        __InitMultipleThread();
    }

    td = malloc( sizeof( *td ) );
    if( td == NULL ) {
        _RWD_errno = ENOMEM;
        return( -1L );
    }

    stack_size = __ROUND_UP_SIZE_4K( stack_size );

    wait_handle = RdosCreateWait();

    td->rtn = start_addr;
    td->argument = arglist;
    td->signal = RdosCreateSignal();
    RdosResetSignal( td->signal );
    RdosAddWaitForSignal( wait_handle, td->signal, 0 );

    __create_thread(begin_thread_helper, prio, thread_name, td, stack_size);

    RdosWaitForever( wait_handle );
    RdosFreeSignal( td->signal );
    RdosCloseWait( wait_handle );
    th = td->tid;
    free( td );

    return( th );
}