PostgreSQL Source Code: src/backend/port/win32_sema.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

15

19

20static HANDLE *mySemSet;

21static int numSems;

22static int maxSems;

23

25

26

27

28

29

36

37

38

39

40

41

42

43

44

45

46void

57

58

59

60

61

62

63static void

72

73

74

75

76

77

80{

83

84

86

88 elog(PANIC, "too many semaphores created");

89

94

95

98 {

99

101 }

102 else

104 (errmsg("could not create semaphore: error code %lu",

106

108}

109

110

111

112

113

114

115void

117{

118

119

120

121

123 ;

124}

125

126

127

128

129

130

131void

133{

135 bool done = false;

136

137

138

139

140

141

143 wh[1] = sema;

144

145

146

147

148

149

150

151 while (!done)

152 {

154

156

158 switch (rc)

159 {

161

163 break;

165

166 done = true;

167 break;

169

170

171

172

173

174

175

176

177 break;

180 (errmsg("could not lock semaphore: error code %lu",

182 break;

183 default:

184 elog(FATAL, "unexpected return code from WaitForMultipleObjectsEx(): %lu", rc);

185 break;

186 }

187 }

188}

189

190

191

192

193

194

195void

197{

200 (errmsg("could not unlock semaphore: error code %lu",

202}

203

204

205

206

207

208

209bool

211{

213

215

217 {

218

219 return true;

220 }

222 {

223

225 return false;

226 }

227

228

230 (errmsg("could not try-lock semaphore: error code %lu",

232

233

234 return false;

235}

#define Assert(condition)

#define ereport(elevel,...)

void on_shmem_exit(pg_on_exit_callback function, Datum arg)

#define CHECK_FOR_INTERRUPTS()

void pgwin32_dispatch_queued_signals(void)

HANDLE pgwin32_signal_event

Size PGSemaphoreShmemSize(int maxSemas)

void PGSemaphoreUnlock(PGSemaphore sema)

void PGReserveSemaphores(int maxSemas)

void PGSemaphoreReset(PGSemaphore sema)

void PGSemaphoreLock(PGSemaphore sema)

bool PGSemaphoreTryLock(PGSemaphore sema)

PGSemaphore PGSemaphoreCreate(void)

static void ReleaseSemaphores(int code, Datum arg)