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