blob: f3c1d452a4951140062b49a7f4eae3ccc64af50a [file] [log] [blame]
Guido van Rossum34679b71993-01-26 13:33:44 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossum34679b71993-01-26 13:33:44 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossum34679b71993-01-26 13:33:44 +00009******************************************************************/
10
Guido van Rossum1d5735e1994-08-30 08:27:36 +000011/* Thread package.
12 This is intended to be usable independently from Python.
13 The implementation for system foobar is in a file thread_foobar.h
14 which is included by this file dependent on config settings.
15 Stuff shared by all thread_*.h files is collected here. */
16
Guido van Rossum1d5735e1994-08-30 08:27:36 +000017#include "config.h"
Guido van Rossum1d5735e1994-08-30 08:27:36 +000018
Guido van Rossumf2615261998-12-04 18:50:20 +000019/* config.h may or may not define DL_IMPORT */
20#ifndef DL_IMPORT /* declarations for DLL import/export */
21#define DL_IMPORT(RTYPE) RTYPE
22#endif
23
Guido van Rossum2571cc81999-04-07 16:07:23 +000024#ifndef DONT_HAVE_STDIO_H
Guido van Rossum1d5735e1994-08-30 08:27:36 +000025#include <stdio.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000026#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +000027
28#ifdef HAVE_STDLIB_H
29#include <stdlib.h>
30#else
Guido van Rossum2571cc81999-04-07 16:07:23 +000031#ifdef Py_DEBUG
Guido van Rossum1d5735e1994-08-30 08:27:36 +000032extern char *getenv();
33#endif
Guido van Rossum2571cc81999-04-07 16:07:23 +000034#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +000035
Guido van Rossum80bb9651996-12-05 23:27:02 +000036#ifdef HAVE_UNISTD_H
37#include <unistd.h>
38#endif
39
Guido van Rossum64f91051997-05-22 20:41:59 +000040#ifdef __DGUX
41#define _USING_POSIX4A_DRAFT6
42#endif
43
Guido van Rossumd11bfdd1997-04-29 21:48:34 +000044#ifdef __sgi
45#ifndef HAVE_PTHREAD_H /* XXX Need to check in configure.in */
46#undef _POSIX_THREADS
47#endif
48#endif
49
Guido van Rossum49b56061998-10-01 20:42:43 +000050#include "pythread.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000051
Guido van Rossum1d5735e1994-08-30 08:27:36 +000052#ifdef __ksr__
53#define _POSIX_THREADS
Guido van Rossumf9f2e821992-08-17 08:59:08 +000054#endif
55
Guido van Rossum1d5735e1994-08-30 08:27:36 +000056#ifndef _POSIX_THREADS
57
Guido van Rossum1984f1e1992-08-04 12:41:02 +000058#ifdef __sgi
Guido van Rossum1d5735e1994-08-30 08:27:36 +000059#define SGI_THREADS
Guido van Rossum1984f1e1992-08-04 12:41:02 +000060#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +000061
Guido van Rossum1d5735e1994-08-30 08:27:36 +000062#ifdef HAVE_THREAD_H
63#define SOLARIS_THREADS
64#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +000065
Guido van Rossum1d5735e1994-08-30 08:27:36 +000066#if defined(sun) && !defined(SOLARIS_THREADS)
67#define SUN_LWP
68#endif
69
Guido van Rossum095249f2000-04-24 15:06:51 +000070#ifdef __MWERKS__
71#define _POSIX_THREADS
72#endif
73
Sjoerd Mullender66bca321993-12-03 16:54:45 +000074#endif /* _POSIX_THREADS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000075
76#ifdef __STDC__
77#define _P(args) args
78#define _P0() (void)
79#define _P1(v,t) (t)
80#define _P2(v1,t1,v2,t2) (t1,t2)
81#else
82#define _P(args) ()
83#define _P0() ()
84#define _P1(v,t) (v) t;
85#define _P2(v1,t1,v2,t2) (v1,v2) t1; t2;
Sjoerd Mullender66bca321993-12-03 16:54:45 +000086#endif /* __STDC__ */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000087
Guido van Rossum408027e1996-12-30 16:17:54 +000088#ifdef Py_DEBUG
Guido van Rossum1d5735e1994-08-30 08:27:36 +000089static int thread_debug = 0;
90#define dprintf(args) ((thread_debug & 1) && printf args)
91#define d2printf(args) ((thread_debug & 8) && printf args)
92#else
93#define dprintf(args)
94#define d2printf(args)
95#endif
96
Guido van Rossum1984f1e1992-08-04 12:41:02 +000097static int initialized;
98
Guido van Rossum65d5b571998-12-21 19:32:43 +000099static void PyThread__init_thread(); /* Forward */
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000100
Guido van Rossum65d5b571998-12-21 19:32:43 +0000101void PyThread_init_thread _P0()
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000102{
Guido van Rossum408027e1996-12-30 16:17:54 +0000103#ifdef Py_DEBUG
Sjoerd Mullender66bca321993-12-03 16:54:45 +0000104 char *p = getenv("THREADDEBUG");
105
106 if (p) {
107 if (*p)
108 thread_debug = atoi(p);
109 else
110 thread_debug = 1;
111 }
Guido van Rossum408027e1996-12-30 16:17:54 +0000112#endif /* Py_DEBUG */
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000113 if (initialized)
114 return;
115 initialized = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000116 dprintf(("PyThread_init_thread called\n"));
117 PyThread__init_thread();
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000118}
119
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000120#ifdef SGI_THREADS
121#include "thread_sgi.h"
Sjoerd Mullender66bca321993-12-03 16:54:45 +0000122#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000123
124#ifdef SOLARIS_THREADS
125#include "thread_solaris.h"
126#endif
127
128#ifdef SUN_LWP
129#include "thread_lwp.h"
130#endif
131
Guido van Rossum07bd90e2000-05-08 13:41:38 +0000132#ifdef _GNU_PTH
133#include "thread_pth.h"
134#else
Sjoerd Mullender66bca321993-12-03 16:54:45 +0000135#ifdef _POSIX_THREADS
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000136#include "thread_pthread.h"
Sjoerd Mullendere8934121993-01-13 12:08:48 +0000137#endif
Guido van Rossum07bd90e2000-05-08 13:41:38 +0000138#endif
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000139
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000140#ifdef C_THREADS
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000141#include "thread_cthread.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000142#endif
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000143
Guido van Rossumc3f82b61995-01-17 16:29:31 +0000144#ifdef NT_THREADS
145#include "thread_nt.h"
146#endif
147
Guido van Rossum8e9ebfd1997-11-22 21:53:48 +0000148#ifdef OS2_THREADS
149#include "thread_os2.h"
150#endif
151
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000152#ifdef BEOS_THREADS
153#include "thread_beos.h"
154#endif
155
Guido van Rossum2571cc81999-04-07 16:07:23 +0000156#ifdef WINCE_THREADS
157#include "thread_wince.h"
158#endif
159
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000160/*
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000161#ifdef FOOBAR_THREADS
162#include "thread_foobar.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000163#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000164*/