Repercuter les modifs recentes sur posix.c -- a tester
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1828 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
3c1dede455
commit
f8c6ae416a
|
@ -64,8 +64,9 @@ struct caml_thread_struct {
|
|||
struct caml_thread_struct * next; /* Double linking of running threads */
|
||||
struct caml_thread_struct * prev;
|
||||
#ifdef NATIVE_CODE
|
||||
struct caml_context * last_context;
|
||||
/* Saved value of caml_last_context */
|
||||
char * bottom_of_stack; /* Saved value of caml_bottom_of_stack */
|
||||
unsigned long last_retaddr; /* Saved value of caml_last_return_address */
|
||||
value * gc_regs; /* Saved value of caml_gc_regs */
|
||||
char * exception_pointer; /* Saved value of caml_exception_pointer */
|
||||
struct caml__roots_block * local_roots; /* Saved value of local_roots */
|
||||
#else
|
||||
|
@ -96,14 +97,6 @@ static __declspec( thread ) struct channel * last_channel_locked = NULL;
|
|||
/* Identifier for next thread creation */
|
||||
static long thread_next_ident = 0;
|
||||
|
||||
/* These declarations should go in some include file */
|
||||
|
||||
#ifdef NATIVE_CODE
|
||||
extern char * caml_bottom_of_stack;
|
||||
extern unsigned long caml_last_return_address;
|
||||
extern char * caml_exception_pointer;
|
||||
#endif
|
||||
|
||||
/* Forward declarations */
|
||||
|
||||
static void caml_wthread_error (char * msg);
|
||||
|
@ -122,8 +115,9 @@ static void caml_thread_scan_roots(scanning_action action)
|
|||
/* Don't rescan the stack of the current thread, it was done already */
|
||||
if (th != curr_thread) {
|
||||
#ifdef NATIVE_CODE
|
||||
if (th->last_context != NULL)
|
||||
do_local_roots(action, th->last_context, th->local_roots);
|
||||
if (th->bottom_of_stack != NULL)
|
||||
do_local_roots(action, th->bottom_of_stack, th->last_retaddr,
|
||||
th->gc_regs, th->local_roots);
|
||||
#else
|
||||
do_local_roots(action, th->sp, th->stack_high, th->local_roots);
|
||||
#endif
|
||||
|
@ -146,7 +140,9 @@ static void caml_thread_enter_blocking_section(void)
|
|||
/* Save the stack-related global variables in the thread descriptor
|
||||
of the current thread */
|
||||
#ifdef NATIVE_CODE
|
||||
curr_thread->last_context = caml_last_context;
|
||||
curr_thread->bottom_of_stack = caml_bottom_of_stack;
|
||||
curr_thread->last_retaddr = caml_last_return_address;
|
||||
curr_thread->gc_regs = caml_gc_regs;
|
||||
curr_thread->exception_pointer = caml_exception_pointer;
|
||||
curr_thread->local_roots = local_roots;
|
||||
#else
|
||||
|
@ -168,7 +164,9 @@ static void caml_thread_leave_blocking_section(void)
|
|||
WaitForSingleObject(caml_mutex, INFINITE);
|
||||
/* Restore the stack-related global variables */
|
||||
#ifdef NATIVE_CODE
|
||||
caml_last_context = curr_thread->last_context;
|
||||
caml_bottom_of_stack= curr_thread->bottom_of_stack;
|
||||
caml_last_return_address = curr_thread->last_retaddr;
|
||||
caml_gc_regs = curr_thread->gc_regs;
|
||||
caml_exception_pointer = curr_thread->exception_pointer;
|
||||
local_roots = curr_thread->local_roots;
|
||||
#else
|
||||
|
@ -218,7 +216,7 @@ static void caml_io_mutex_unlock_exn(void)
|
|||
if (last_channel_locked != NULL) caml_io_mutex_unlock(last_channel_locked);
|
||||
}
|
||||
|
||||
/* The "tick" thread fakes a SIGVTALRM signal at regular intervals. */
|
||||
/* The "tick" thread fakes a signal at regular intervals. */
|
||||
|
||||
static void * caml_thread_tick(void)
|
||||
{
|
||||
|
@ -347,6 +345,7 @@ value caml_thread_new(value clos) /* ML */
|
|||
th->descr = descr;
|
||||
#ifdef NATIVE_CODE
|
||||
th->bottom_of_stack = NULL;
|
||||
th->exception_pointer = NULL;
|
||||
th->local_roots = NULL;
|
||||
#else
|
||||
/* Allocate the stacks */
|
||||
|
|
Loading…
Reference in New Issue