X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4c809a6e671dd2d46724fd05644020a7084b880d..8be93beba0c7547303f5a102c2cb528b8c586066:/src/xbt/context_private.h diff --git a/src/xbt/context_private.h b/src/xbt/context_private.h index f0450fda4e..75d378a0d6 100644 --- a/src/xbt/context_private.h +++ b/src/xbt/context_private.h @@ -14,46 +14,51 @@ #include "xbt/dynar.h" /* void_f_pvoid_t */ #include "portable.h" /* loads context system definitions */ -#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) && !defined(__TOS_WIN__) -#include "ucontext_stack.h" /* loads context system definitions */ -#endif - #include "xbt/context.h" #include "xbt/ex.h" -#ifdef USE_PTHREADS -# include -#elif defined(USE_WIN_THREADS) -# include "win_thread.h" +#ifdef CONTEXT_THREADS +# include "xbt/xbt_os_thread.h" #else +# include "ucontext_stack.h" /* loads context system definitions */ +# include # define STACK_SIZE 128*1024 /* Lower this if you want to reduce the memory consumption */ -#endif /* USE_PTHREADS */ +#endif /* not CONTEXT_THREADS */ -typedef struct s_xbt_context -{ +typedef struct s_xbt_context { s_xbt_swag_hookup_t hookup; - #ifdef USE_PTHREADS - pthread_cond_t cond; - pthread_mutex_t mutex; - pthread_t *thread; /* the thread that execute the code */ - #elif defined(USE_WIN_THREADS) - win_thread_cond_t cond; - win_thread_mutex_t mutex; - win_thread_t thread; /* the thread that execute the code */ - #else - ucontext_t uc; /* the thread that execute the code */ + char *name; + + /* Declaration of the thread running the process */ +#ifdef JAVA_SIMGRID /* come first because other ones are defined too */ + jobject jprocess; /* the java process instance */ + JNIEnv* jenv; /* jni interface pointer for this thread */ + ex_ctx_t *exception; /* exception container -- only in ucontext&java, os_threads deals with it for us otherwise */ +#else +# ifdef CONTEXT_THREADS + xbt_os_thread_t thread; /* a plain dumb thread (portable to posix or windows) */ + xbt_os_sem_t begin; /* this semaphore is used to schedule/unschedule the process */ + xbt_os_sem_t end; /* this semaphore is used to schedule/unschedule the process */ +# else + ucontext_t uc; /* the thread that execute the code */ char stack[STACK_SIZE]; struct s_xbt_context *save; - #endif /* USE_PTHREADS || USE_WIN_THREADS */ - xbt_context_function_t code; /* the scheduler fonction */ + ex_ctx_t *exception; /* exception container -- only in ucontext&java, os_threads deals with it for us otherwise */ +# endif /* CONTEXT_THREADS */ +#endif /* JAVA_SIMGRID */ + + /* What to run */ + xbt_main_func_t code; /* the scheduled fonction */ int argc; char **argv; - void_f_pvoid_t *startup_func; + + /* Init/exit functions */ + void_f_pvoid_t startup_func; void *startup_arg; - void_f_pvoid_t *cleanup_func; + void_f_pvoid_t cleanup_func; void *cleanup_arg; - ex_ctx_t *exception; /* exception */ + int iwannadie; /* Set to true by the context when it wants to commit suicide */ } s_xbt_context_t;