1 /* Copyright (C) 1998, 1999 artofcode LLC. All rights reserved.
2
3 This program is free software; you can redistribute it and/or modify it
4 under the terms of the GNU General Public License as published by the
5 Free Software Foundation; either version 2 of the License, or (at your
6 option) any later version.
7
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along
14 with this program; if not, write to the Free Software Foundation, Inc.,
15 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
16
17 */
18
19 /*$Id: gp_nsync.c,v 1.2.6.1.2.1 2003/01/17 00:49:02 giles Exp $ */
20 /* Dummy thread / semaphore / monitor implementation */
21 #include "std.h"
22 #include "gserror.h"
23 #include "gserrors.h"
24 #include "gpsync.h"
25
26 /* ------- Synchronization primitives -------- */
27
28 /* Semaphores */
29
30 uint
gp_semaphore_sizeof(void)31 gp_semaphore_sizeof(void)
32 {
33 return sizeof(gp_semaphore);
34 }
35
36 int
gp_semaphore_open(gp_semaphore * sema)37 gp_semaphore_open(gp_semaphore * sema)
38 {
39 if (sema)
40 *(int *)sema = 0;
41 return 0;
42 }
43
44 int
gp_semaphore_close(gp_semaphore * sema)45 gp_semaphore_close(gp_semaphore * sema)
46 {
47 return 0;
48 }
49
50 int
gp_semaphore_wait(gp_semaphore * sema)51 gp_semaphore_wait(gp_semaphore * sema)
52 {
53 if (*(int *)sema == 0)
54 return_error(gs_error_unknownerror); /* no real waiting */
55 --(*(int *)sema);
56 return 0;
57 }
58
59 int
gp_semaphore_signal(gp_semaphore * sema)60 gp_semaphore_signal(gp_semaphore * sema)
61 {
62 ++(*(int *)sema);
63 return 0;
64 }
65
66 /* Monitors */
67
68 uint
gp_monitor_sizeof(void)69 gp_monitor_sizeof(void)
70 {
71 return sizeof(gp_monitor);
72 }
73
74 int
gp_monitor_open(gp_monitor * mon)75 gp_monitor_open(gp_monitor * mon)
76 {
77 if (mon)
78 mon->dummy_ = 0;
79 return 0;
80 }
81
82 int
gp_monitor_close(gp_monitor * mon)83 gp_monitor_close(gp_monitor * mon)
84 {
85 return 0;
86 }
87
88 int
gp_monitor_enter(gp_monitor * mon)89 gp_monitor_enter(gp_monitor * mon)
90 {
91 if (mon->dummy_ != 0)
92 return_error(gs_error_unknownerror);
93 mon->dummy_ = mon;
94 return 0;
95 }
96
97 int
gp_monitor_leave(gp_monitor * mon)98 gp_monitor_leave(gp_monitor * mon)
99 {
100 if (mon->dummy_ != mon)
101 return_error(gs_error_unknownerror);
102 mon->dummy_ = 0;
103 return 0;
104 }
105
106 /* Thread creation */
107
108 int
gp_create_thread(gp_thread_creation_callback_t proc,void * proc_data)109 gp_create_thread(gp_thread_creation_callback_t proc, void *proc_data)
110 {
111 return_error(gs_error_unknownerror);
112 }
113