Export <slot> from GOOPS
[bpt/guile.git] / libguile / threads.h
index 5398218..6b85baf 100644 (file)
@@ -4,7 +4,7 @@
 #define SCM_THREADS_H
 
 /* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2006,
- *   2007, 2008, 2009, 2011, 2013 Free Software Foundation, Inc.
+ *   2007, 2008, 2009, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -28,8 +28,8 @@
 #include "libguile/procs.h"
 #include "libguile/throw.h"
 #include "libguile/root.h"
+#include "libguile/dynstack.h"
 #include "libguile/iselect.h"
-#include "libguile/dynwind.h"
 #include "libguile/continuations.h"
 
 #if SCM_USE_PTHREAD_THREADS
@@ -72,15 +72,16 @@ typedef struct scm_i_thread {
   scm_i_pthread_cond_t sleep_cond;
   int sleep_fd, sleep_pipe[2];
 
-  /* XXX: These two fields used to hold information about the BDW-GC
-     mark stack during the mark phase.  They are no longer used.  */
-  void *current_mark_stack_ptr;
-  void *current_mark_stack_limit;
+  /* Thread-local freelists; see gc-inline.h.  */
+  void **freelists;
+  void **pointerless_freelists;
 
   /* Other thread local things.
    */
   SCM dynamic_state;
-  SCM dynwinds;
+
+  /* The dynamic stack.  */
+  scm_t_dynstack dynstack;
 
   /* For system asyncs.
    */
@@ -108,7 +109,7 @@ typedef struct scm_i_thread {
   SCM_STACKITEM *continuation_base;
 
   /* For keeping track of the stack and registers. */
-  SCM vm;
+  struct scm_vm *vp;
   SCM_STACKITEM *base;
   scm_i_jmp_buf regs;
 #ifdef __ia64__
@@ -145,9 +146,6 @@ SCM_INTERNAL void scm_init_threads_default_dynamic_state (void);
 
 SCM_INTERNAL void scm_i_dynwind_pthread_mutex_lock_block_asyncs (scm_i_pthread_mutex_t *mutex);
 
-#define SCM_THREAD_SWITCHING_CODE \
-  do { } while (0)
-
 SCM_API SCM scm_call_with_new_thread (SCM thunk, SCM handler);
 SCM_API SCM scm_yield (void);
 SCM_API SCM scm_cancel_thread (SCM t);
@@ -205,12 +203,8 @@ SCM_INTERNAL SCM_THREAD_LOCAL scm_i_thread *scm_i_current_thread;
 
 # endif /* !SCM_HAVE_THREAD_STORAGE_CLASS */
 
-# define scm_i_dynwinds()         (SCM_I_CURRENT_THREAD->dynwinds)
-# define scm_i_set_dynwinds(w)    (SCM_I_CURRENT_THREAD->dynwinds = (w))
-
 #endif /* BUILDING_LIBGUILE */
 
-
 SCM_INTERNAL scm_i_pthread_mutex_t scm_i_misc_mutex;
 
 /* Convenience functions for working with the pthread API in guile