blob: 18ddc21cf0847d2327cab6fefdba7bd959a3facf [file] [log] [blame]
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +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 Rossum2c8cb9f1994-05-09 15:12:46 +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 Rossum2c8cb9f1994-05-09 15:12:46 +00009******************************************************************/
10
11/*
12 * Initialization.
13 */
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000014static void
15PyThread__init_thread(void)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000016{
17}
18
19/*
20 * Thread support.
21 */
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000022int
23PyThread_start_new_thread(void (*func)(void *), void *arg)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000024{
25 int success = 0; /* init not needed when SOLARIS_THREADS and */
26 /* C_THREADS implemented properly */
27
Guido van Rossum65d5b571998-12-21 19:32:43 +000028 dprintf(("PyThread_start_new_thread called\n"));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000029 if (!initialized)
Guido van Rossum65d5b571998-12-21 19:32:43 +000030 PyThread_init_thread();
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000031 return success < 0 ? 0 : 1;
32}
33
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000034long
35PyThread_get_thread_ident(void)
Guido van Rossume944da81994-05-23 12:43:41 +000036{
37 if (!initialized)
Guido van Rossum65d5b571998-12-21 19:32:43 +000038 PyThread_init_thread();
Guido van Rossume944da81994-05-23 12:43:41 +000039}
40
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000041static
42void do_PyThread_exit_thread(int no_cleanup)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000043{
Guido van Rossum65d5b571998-12-21 19:32:43 +000044 dprintf(("PyThread_exit_thread called\n"));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000045 if (!initialized)
46 if (no_cleanup)
47 _exit(0);
48 else
49 exit(0);
50}
51
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000052void
53PyThread_exit_thread(void)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000054{
Guido van Rossum65d5b571998-12-21 19:32:43 +000055 do_PyThread_exit_thread(0);
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000056}
57
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000058void
59PyThread__exit_thread(void)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000060{
Guido van Rossum65d5b571998-12-21 19:32:43 +000061 do_PyThread_exit_thread(1);
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000062}
63
64#ifndef NO_EXIT_PROG
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000065static
66void do_PyThread_exit_prog(int status, int no_cleanup)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000067{
Guido van Rossum65d5b571998-12-21 19:32:43 +000068 dprintf(("PyThread_exit_prog(%d) called\n", status));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000069 if (!initialized)
70 if (no_cleanup)
71 _exit(status);
72 else
73 exit(status);
74}
75
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000076void
77PyThread_exit_prog(int status)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000078{
Guido van Rossum65d5b571998-12-21 19:32:43 +000079 do_PyThread_exit_prog(status, 0);
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000080}
81
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000082void
83PyThread__exit_prog(int status)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000084{
Guido van Rossum65d5b571998-12-21 19:32:43 +000085 do_PyThread_exit_prog(status, 1);
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000086}
87#endif /* NO_EXIT_PROG */
88
89/*
90 * Lock support.
91 */
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000092PyThread_type_lock
93PyThread_allocate_lock(void)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000094{
95
Guido van Rossum65d5b571998-12-21 19:32:43 +000096 dprintf(("PyThread_allocate_lock called\n"));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000097 if (!initialized)
Guido van Rossum65d5b571998-12-21 19:32:43 +000098 PyThread_init_thread();
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +000099
Fred Drakea44d3532000-06-30 15:01:00 +0000100 dprintf(("PyThread_allocate_lock() -> %p\n", lock));
Guido van Rossum65d5b571998-12-21 19:32:43 +0000101 return (PyThread_type_lock) lock;
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000102}
103
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000104void
105PyThread_free_lock(PyThread_type_lock lock)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000106{
Fred Drakea44d3532000-06-30 15:01:00 +0000107 dprintf(("PyThread_free_lock(%p) called\n", lock));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000108}
109
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000110int
111PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000112{
113 int success;
114
Fred Drakea44d3532000-06-30 15:01:00 +0000115 dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag));
116 dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000117 return success;
118}
119
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000120void
121PyThread_release_lock(PyThread_type_lock lock)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000122{
Fred Drakea44d3532000-06-30 15:01:00 +0000123 dprintf(("PyThread_release_lock(%p) called\n", lock));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000124}
125
126/*
127 * Semaphore support.
128 */
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000129PyThread_type_sema
130PyThread_allocate_sema(int value)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000131{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000132 dprintf(("PyThread_allocate_sema called\n"));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000133 if (!initialized)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000134 PyThread_init_thread();
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000135
Fred Drakea44d3532000-06-30 15:01:00 +0000136 dprintf(("PyThread_allocate_sema() -> %p\n", sema));
Guido van Rossum65d5b571998-12-21 19:32:43 +0000137 return (PyThread_type_sema) sema;
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000138}
139
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000140void
141PyThread_free_sema(PyThread_type_sema sema)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000142{
Fred Drakea44d3532000-06-30 15:01:00 +0000143 dprintf(("PyThread_free_sema(%p) called\n", sema));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000144}
145
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000146int
147PyThread_down_sema(PyThread_type_sema sema, int waitflag)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000148{
Fred Drakea44d3532000-06-30 15:01:00 +0000149 dprintf(("PyThread_down_sema(%p, %d) called\n", sema, waitflag));
150 dprintf(("PyThread_down_sema(%p) return\n", sema));
Guido van Rossumcf1474b1996-10-08 14:17:53 +0000151 return -1;
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000152}
153
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000154void
155PyThread_up_sema(PyThread_type_sema sema)
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000156{
Fred Drakea44d3532000-06-30 15:01:00 +0000157 dprintf(("PyThread_up_sema(%p)\n", sema));
Guido van Rossum2c8cb9f1994-05-09 15:12:46 +0000158}