minix/lib/libmthread/global.h
Lionel Sambuc e415d48872 Libc update to simplify merge.
Bumping libc files for unsupported architectures, to simplify merging.
A bunch of small fixes:
 * in libutil update
 * the macro in endian.h
 * some undefined types due to clear separation from host.
 * Fix a warning for cdbr.c

Some modification which were required for the new build system:
 * inclusion path for const.h in sconst, still hacky
 * Removed default malloc.c which conflicts on some occasions.
2012-11-15 16:07:29 +01:00

51 lines
1.6 KiB
C

/* EXTERN should be extern, except for the allocate file */
#ifdef ALLOCATE
#undef EXTERN
#define EXTERN
#endif
#include <assert.h>
#include <sys/types.h>
#include <sys/signal.h>
#define NO_THREADS 4
#define MAX_THREAD_POOL 1024
#define STACKSZ 4096
#define MAIN_THREAD (-1)
#define NO_THREAD (-2)
#define isokthreadid(i) (i == MAIN_THREAD || (i >= 0 && i < no_threads))
#define MTHREAD_INIT_MAGIC 0xca11ab1e
#define MTHREAD_NOT_INUSE 0xdefec7
typedef enum {
MS_CONDITION, MS_DEAD, MS_EXITING, MS_MUTEX, MS_RUNNABLE, MS_NEEDRESET
} mthread_state_t;
struct __mthread_tcb {
mthread_thread_t m_tid; /* My own ID */
mthread_state_t m_state; /* Thread state */
struct __mthread_attr m_attr; /* Thread attributes */
struct __mthread_cond *m_cond; /* Condition variable that this thread
* might be blocking on */
void *(*m_proc)(void *); /* Procedure to run */
void *m_arg; /* Argument passed to procedure */
void *m_result; /* Result after procedure returns */
mthread_cond_t m_exited; /* Condition variable signaling this
* thread has ended */
mthread_mutex_t m_exitm; /* Mutex to accompany exit condition */
ucontext_t m_context; /* Thread machine context */
struct __mthread_tcb *m_next; /* Next thread in linked list */
};
typedef struct __mthread_tcb mthread_tcb_t;
EXTERN mthread_thread_t current_thread;
EXTERN mthread_queue_t free_threads;
EXTERN mthread_queue_t run_queue; /* FIFO of runnable threads */
EXTERN mthread_tcb_t **threads;
EXTERN mthread_tcb_t mainthread;
EXTERN int no_threads;
EXTERN int used_threads;
EXTERN int need_reset;
EXTERN int running_main_thread;