This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ignore some newer build generated files
[perl5.git] / fakethr.h
index fc25571..7c82aa6 100644 (file)
--- a/fakethr.h
+++ b/fakethr.h
@@ -1,15 +1,75 @@
+/*    fakethr.h
+ *
+ *    Copyright (C) 1999, by Larry Wall and others
+ *
+ *    You may distribute under the terms of either the GNU General Public
+ *    License or the Artistic License, as specified in the README file.
+ *
+ */
+
 typedef int perl_mutex;
 typedef int perl_key;
 
+typedef struct perl_thread *perl_os_thread;
+/* With fake threads, thr is global(ish) so we don't need dTHR */
+#define dTHR extern int errno
+
 struct perl_wait_queue {
-    struct thread *            thread;
+    struct perl_thread *       thread;
     struct perl_wait_queue *   next;
 };
 typedef struct perl_wait_queue *perl_cond;
 
+/* Ask thread.h to include our per-thread extras */
+#define HAVE_THREAD_INTERN
 struct thread_intern {
-    perl_thread next_run, prev_run;     /* Linked list of runnable threads */
+    perl_os_thread next_run, prev_run;  /* Linked list of runnable threads */
     perl_cond   wait_queue;             /* Wait queue that we are waiting on */
     IV          private;                /* Holds data across time slices */
     I32         savemark;               /* Holds MARK for thread join values */
 };
+
+#define init_thread_intern(t)                          \
+    STMT_START {                                       \
+       t->self = (t);                                  \
+       (t)->i.next_run = (t)->i.prev_run = (t);        \
+       (t)->i.wait_queue = 0;                          \
+       (t)->i.private = 0;                             \
+    } STMT_END
+
+/*
+ * Note that SCHEDULE() is only callable from pp code (which
+ * must be expecting to be restarted). We'll have to do
+ * something a bit different for XS code.
+ */
+
+#define SCHEDULE() return schedule(), PL_op
+
+#define MUTEX_LOCK(m)
+#define MUTEX_UNLOCK(m)
+#define MUTEX_INIT(m)
+#define MUTEX_DESTROY(m)
+#define COND_INIT(c) perl_cond_init(c)
+#define COND_SIGNAL(c) perl_cond_signal(c)
+#define COND_BROADCAST(c) perl_cond_broadcast(c)
+#define COND_WAIT(c, m)                \
+    STMT_START {               \
+       perl_cond_wait(c);      \
+       SCHEDULE();             \
+    } STMT_END
+#define COND_DESTROY(c)
+
+#define THREAD_CREATE(t, f)    f((t))
+#define THREAD_POST_CREATE(t)  NOOP
+
+#define YIELD  NOOP
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */