a7072a5e1c
Before, the 'main thread' of a process was never taken into account anywhere in the library, causing mutexes not to work properly (and consequently, neither did the condition variables). For example, if the 'main thread' (that is, the thread which is started at the beginning of a process; not a spawned thread by the library) would lock a mutex, it wasn't actually locked.
49 lines
1.7 KiB
C
49 lines
1.7 KiB
C
#ifndef __MTHREAD_PROTO_H__
|
|
#define __MTHREAD_PROTO_H__
|
|
|
|
/* allocate.c */
|
|
_PROTOTYPE( mthread_tcb_t * mthread_find_tcb, (mthread_thread_t thread) );
|
|
|
|
/* attribute.c */
|
|
_PROTOTYPE( void mthread_init_valid_attributes, (void) );
|
|
#ifdef MDEBUG
|
|
_PROTOTYPE( int mthread_attr_verify, (void) );
|
|
#endif
|
|
|
|
/* cond.c */
|
|
_PROTOTYPE( void mthread_init_valid_conditions, (void) );
|
|
#ifdef MDEBUG
|
|
_PROTOTYPE( int mthread_cond_verify, (void) );
|
|
#endif
|
|
|
|
/* misc.c */
|
|
#define mthread_panic(m) mthread_panic_f(__FILE__, __LINE__, (m))
|
|
_PROTOTYPE( void mthread_panic_f, (const char *file, int line,
|
|
const char *msg) );
|
|
#define mthread_debug(m) mthread_debug_f(__FILE__, __LINE__, (m))
|
|
_PROTOTYPE( void mthread_debug_f, (const char *file, int line,
|
|
const char *msg) );
|
|
|
|
/* mutex.c */
|
|
_PROTOTYPE( void mthread_init_valid_mutexes, (void) );
|
|
_PROTOTYPE( int mthread_mutex_valid, (mthread_mutex_t *mutex) );
|
|
#ifdef MDEBUG
|
|
_PROTOTYPE( int mthread_mutex_verify, (void) );
|
|
#endif
|
|
|
|
/* schedule.c */
|
|
_PROTOTYPE( int mthread_getcontext, (ucontext_t *ctxt) );
|
|
_PROTOTYPE( void mthread_init_scheduler, (void) );
|
|
_PROTOTYPE( void mthread_schedule, (void) );
|
|
_PROTOTYPE( void mthread_suspend, (mthread_state_t state) );
|
|
_PROTOTYPE( void mthread_unsuspend, (mthread_thread_t thread) );
|
|
|
|
/* queue.c */
|
|
_PROTOTYPE( void mthread_dump_queue, (mthread_queue_t *queue) );
|
|
_PROTOTYPE( void mthread_queue_init, (mthread_queue_t *queue) );
|
|
_PROTOTYPE( void mthread_queue_add, (mthread_queue_t *queue,
|
|
mthread_thread_t thread) );
|
|
_PROTOTYPE( mthread_thread_t mthread_queue_remove, (mthread_queue_t *queue));
|
|
_PROTOTYPE( int mthread_queue_isempty, (mthread_queue_t *queue) );
|
|
|
|
#endif
|