blob: 0f4c392b2de2077128d49c91b6d6dba659c786d1 [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
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000032extern char *getenv(const char *);
Guido van Rossum1d5735e1994-08-30 08:27:36 +000033#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
Guido van Rossum1984f1e1992-08-04 12:41:02 +000076
Guido van Rossum408027e1996-12-30 16:17:54 +000077#ifdef Py_DEBUG
Guido van Rossum1d5735e1994-08-30 08:27:36 +000078static int thread_debug = 0;
79#define dprintf(args) ((thread_debug & 1) && printf args)
80#define d2printf(args) ((thread_debug & 8) && printf args)
81#else
82#define dprintf(args)
83#define d2printf(args)
84#endif
85
Guido van Rossum1984f1e1992-08-04 12:41:02 +000086static int initialized;
87
Thomas Wouters8ec68fd2000-07-24 14:39:50 +000088static void PyThread__init_thread(void); /* Forward */
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +000089
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000090void PyThread_init_thread(void)
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +000091{
Guido van Rossum408027e1996-12-30 16:17:54 +000092#ifdef Py_DEBUG
Sjoerd Mullender66bca321993-12-03 16:54:45 +000093 char *p = getenv("THREADDEBUG");
94
95 if (p) {
96 if (*p)
97 thread_debug = atoi(p);
98 else
99 thread_debug = 1;
100 }
Guido van Rossum408027e1996-12-30 16:17:54 +0000101#endif /* Py_DEBUG */
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000102 if (initialized)
103 return;
104 initialized = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000105 dprintf(("PyThread_init_thread called\n"));
106 PyThread__init_thread();
Sjoerd Mullenderaee8bc11992-09-02 11:25:37 +0000107}
108
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000109#ifdef SGI_THREADS
110#include "thread_sgi.h"
Sjoerd Mullender66bca321993-12-03 16:54:45 +0000111#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000112
113#ifdef SOLARIS_THREADS
114#include "thread_solaris.h"
115#endif
116
117#ifdef SUN_LWP
118#include "thread_lwp.h"
119#endif
120
Guido van Rossum07bd90e2000-05-08 13:41:38 +0000121#ifdef _GNU_PTH
122#include "thread_pth.h"
123#else
Sjoerd Mullender66bca321993-12-03 16:54:45 +0000124#ifdef _POSIX_THREADS
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000125#include "thread_pthread.h"
Sjoerd Mullendere8934121993-01-13 12:08:48 +0000126#endif
Guido van Rossum07bd90e2000-05-08 13:41:38 +0000127#endif
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000128
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000129#ifdef C_THREADS
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000130#include "thread_cthread.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000131#endif
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000132
Guido van Rossumc3f82b61995-01-17 16:29:31 +0000133#ifdef NT_THREADS
134#include "thread_nt.h"
135#endif
136
Guido van Rossum8e9ebfd1997-11-22 21:53:48 +0000137#ifdef OS2_THREADS
138#include "thread_os2.h"
139#endif
140
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000141#ifdef BEOS_THREADS
142#include "thread_beos.h"
143#endif
144
Guido van Rossum2571cc81999-04-07 16:07:23 +0000145#ifdef WINCE_THREADS
146#include "thread_wince.h"
147#endif
148
Guido van Rossumf9f2e821992-08-17 08:59:08 +0000149/*
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000150#ifdef FOOBAR_THREADS
151#include "thread_foobar.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000152#endif
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000153*/