ffi-nats-core 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ffi-nats-core.gemspec +8 -0
- data/lib/ffi/nats/core/version.rb +1 -1
- data/vendor/cnats/CMakeLists.txt +137 -0
- data/vendor/cnats/adapters/libevent.h +220 -0
- data/vendor/cnats/adapters/libuv.h +472 -0
- data/vendor/cnats/examples/CMakeLists.txt +56 -0
- data/vendor/cnats/examples/asynctimeout.c +83 -0
- data/vendor/cnats/examples/examples.h +322 -0
- data/vendor/cnats/examples/libevent-pub.c +136 -0
- data/vendor/cnats/examples/libevent-sub.c +104 -0
- data/vendor/cnats/examples/libuv-pub.c +120 -0
- data/vendor/cnats/examples/libuv-sub.c +114 -0
- data/vendor/cnats/examples/publisher.c +62 -0
- data/vendor/cnats/examples/queuegroup.c +132 -0
- data/vendor/cnats/examples/replier.c +149 -0
- data/vendor/cnats/examples/requestor.c +75 -0
- data/vendor/cnats/examples/subscriber.c +133 -0
- data/vendor/cnats/src/CMakeLists.txt +31 -0
- data/vendor/cnats/src/asynccb.c +66 -0
- data/vendor/cnats/src/asynccb.h +42 -0
- data/vendor/cnats/src/buf.c +246 -0
- data/vendor/cnats/src/buf.h +116 -0
- data/vendor/cnats/src/comsock.c +474 -0
- data/vendor/cnats/src/comsock.h +81 -0
- data/vendor/cnats/src/conn.c +2725 -0
- data/vendor/cnats/src/conn.h +75 -0
- data/vendor/cnats/src/err.h +31 -0
- data/vendor/cnats/src/gc.h +27 -0
- data/vendor/cnats/src/hash.c +725 -0
- data/vendor/cnats/src/hash.h +141 -0
- data/vendor/cnats/src/include/n-unix.h +56 -0
- data/vendor/cnats/src/include/n-win.h +59 -0
- data/vendor/cnats/src/mem.h +20 -0
- data/vendor/cnats/src/msg.c +155 -0
- data/vendor/cnats/src/msg.h +43 -0
- data/vendor/cnats/src/nats.c +1734 -0
- data/vendor/cnats/src/nats.h +2024 -0
- data/vendor/cnats/src/natsp.h +518 -0
- data/vendor/cnats/src/natstime.c +79 -0
- data/vendor/cnats/src/natstime.h +27 -0
- data/vendor/cnats/src/nuid.c +265 -0
- data/vendor/cnats/src/nuid.h +21 -0
- data/vendor/cnats/src/opts.c +1030 -0
- data/vendor/cnats/src/opts.h +19 -0
- data/vendor/cnats/src/parser.c +869 -0
- data/vendor/cnats/src/parser.h +87 -0
- data/vendor/cnats/src/pub.c +293 -0
- data/vendor/cnats/src/srvpool.c +380 -0
- data/vendor/cnats/src/srvpool.h +71 -0
- data/vendor/cnats/src/stats.c +54 -0
- data/vendor/cnats/src/stats.h +21 -0
- data/vendor/cnats/src/status.c +60 -0
- data/vendor/cnats/src/status.h +95 -0
- data/vendor/cnats/src/sub.c +956 -0
- data/vendor/cnats/src/sub.h +34 -0
- data/vendor/cnats/src/timer.c +86 -0
- data/vendor/cnats/src/timer.h +57 -0
- data/vendor/cnats/src/unix/cond.c +103 -0
- data/vendor/cnats/src/unix/mutex.c +107 -0
- data/vendor/cnats/src/unix/sock.c +105 -0
- data/vendor/cnats/src/unix/thread.c +162 -0
- data/vendor/cnats/src/url.c +134 -0
- data/vendor/cnats/src/url.h +24 -0
- data/vendor/cnats/src/util.c +823 -0
- data/vendor/cnats/src/util.h +75 -0
- data/vendor/cnats/src/version.h +29 -0
- data/vendor/cnats/src/version.h.in +29 -0
- data/vendor/cnats/src/win/cond.c +86 -0
- data/vendor/cnats/src/win/mutex.c +54 -0
- data/vendor/cnats/src/win/sock.c +158 -0
- data/vendor/cnats/src/win/strings.c +108 -0
- data/vendor/cnats/src/win/thread.c +180 -0
- data/vendor/cnats/test/CMakeLists.txt +35 -0
- data/vendor/cnats/test/certs/ca.pem +38 -0
- data/vendor/cnats/test/certs/client-cert.pem +30 -0
- data/vendor/cnats/test/certs/client-key.pem +51 -0
- data/vendor/cnats/test/certs/server-cert.pem +31 -0
- data/vendor/cnats/test/certs/server-key.pem +51 -0
- data/vendor/cnats/test/dylib/CMakeLists.txt +10 -0
- data/vendor/cnats/test/dylib/nonats.c +13 -0
- data/vendor/cnats/test/list.txt +125 -0
- data/vendor/cnats/test/test.c +11655 -0
- data/vendor/cnats/test/tls.conf +15 -0
- data/vendor/cnats/test/tlsverify.conf +19 -0
- metadata +83 -1
@@ -0,0 +1,518 @@
|
|
1
|
+
// Copyright 2015-2016 Apcera Inc. All rights reserved.
|
2
|
+
|
3
|
+
#ifndef NATSP_H_
|
4
|
+
#define NATSP_H_
|
5
|
+
|
6
|
+
#if defined(_WIN32)
|
7
|
+
# include "include/n-win.h"
|
8
|
+
#else
|
9
|
+
# include "include/n-unix.h"
|
10
|
+
#endif
|
11
|
+
|
12
|
+
#if defined(NATS_HAS_TLS)
|
13
|
+
#include <openssl/ssl.h>
|
14
|
+
#include <openssl/err.h>
|
15
|
+
#include <openssl/x509v3.h>
|
16
|
+
#include <openssl/rand.h>
|
17
|
+
#else
|
18
|
+
#define SSL void*
|
19
|
+
#define SSL_free(c) { (c) = NULL; }
|
20
|
+
#define SSL_CTX void*
|
21
|
+
#define SSL_CTX_free(c) { (c) = NULL; }
|
22
|
+
#define NO_SSL_ERR "The library was built without SSL support!"
|
23
|
+
#endif
|
24
|
+
|
25
|
+
#include "err.h"
|
26
|
+
#include "nats.h"
|
27
|
+
#include "buf.h"
|
28
|
+
#include "parser.h"
|
29
|
+
#include "timer.h"
|
30
|
+
#include "url.h"
|
31
|
+
#include "srvpool.h"
|
32
|
+
#include "msg.h"
|
33
|
+
#include "asynccb.h"
|
34
|
+
#include "hash.h"
|
35
|
+
#include "stats.h"
|
36
|
+
#include "natstime.h"
|
37
|
+
#include "nuid.h"
|
38
|
+
|
39
|
+
// Comment/uncomment to replace some function calls with direct structure
|
40
|
+
// access
|
41
|
+
//#define DEV_MODE (1)
|
42
|
+
|
43
|
+
#define LIB_NATS_VERSION_STRING NATS_VERSION_STRING
|
44
|
+
#define LIB_NATS_VERSION_NUMBER NATS_VERSION_NUMBER
|
45
|
+
#define LIB_NATS_VERSION_REQUIRED_NUMBER NATS_VERSION_REQUIRED_NUMBER
|
46
|
+
|
47
|
+
#define CString "C"
|
48
|
+
|
49
|
+
#define _OK_OP_ "+OK"
|
50
|
+
#define _ERR_OP_ "-ERR"
|
51
|
+
#define _MSG_OP_ "MSG"
|
52
|
+
#define _PING_OP_ "PING"
|
53
|
+
#define _PONG_OP_ "PONG"
|
54
|
+
#define _INFO_OP_ "INFO"
|
55
|
+
|
56
|
+
#define _CRLF_ "\r\n"
|
57
|
+
#define _SPC_ " "
|
58
|
+
#define _PUB_P_ "PUB "
|
59
|
+
|
60
|
+
#define _PING_PROTO_ "PING\r\n"
|
61
|
+
#define _PONG_PROTO_ "PONG\r\n"
|
62
|
+
#define _PUB_PROTO_ "PUB %s %s %d\r\n"
|
63
|
+
#define _SUB_PROTO_ "SUB %s %s %d\r\n"
|
64
|
+
#define _UNSUB_PROTO_ "UNSUB %" PRId64 " %d\r\n"
|
65
|
+
#define _UNSUB_NO_MAX_PROTO_ "UNSUB %" PRId64 " \r\n"
|
66
|
+
|
67
|
+
#define STALE_CONNECTION "Stale Connection"
|
68
|
+
|
69
|
+
#define _CRLF_LEN_ (2)
|
70
|
+
#define _SPC_LEN_ (1)
|
71
|
+
#define _PUB_P_LEN_ (4)
|
72
|
+
#define _PING_OP_LEN_ (4)
|
73
|
+
#define _PONG_OP_LEN_ (4)
|
74
|
+
#define _PING_PROTO_LEN_ (6)
|
75
|
+
#define _PONG_PROTO_LEN_ (6)
|
76
|
+
#define _OK_OP_LEN_ (3)
|
77
|
+
#define _ERR_OP_LEN_ (4)
|
78
|
+
|
79
|
+
static const char *inboxPrefix = "_INBOX.";
|
80
|
+
#define NATS_INBOX_PRE_LEN (7)
|
81
|
+
|
82
|
+
#define WAIT_FOR_READ (0)
|
83
|
+
#define WAIT_FOR_WRITE (1)
|
84
|
+
#define WAIT_FOR_CONNECT (2)
|
85
|
+
|
86
|
+
#define MAX_FRAMES (50)
|
87
|
+
|
88
|
+
extern int64_t gLockSpinCount;
|
89
|
+
|
90
|
+
typedef void (*natsInitOnceCb)(void);
|
91
|
+
|
92
|
+
typedef struct __natsControl
|
93
|
+
{
|
94
|
+
char *op;
|
95
|
+
char *args;
|
96
|
+
|
97
|
+
} natsControl;
|
98
|
+
|
99
|
+
typedef struct __natsServerInfo
|
100
|
+
{
|
101
|
+
char *id;
|
102
|
+
char *host;
|
103
|
+
int port;
|
104
|
+
char *version;
|
105
|
+
bool authRequired;
|
106
|
+
bool tlsRequired;
|
107
|
+
int64_t maxPayload;
|
108
|
+
char **connectURLs;
|
109
|
+
int connectURLsCount;
|
110
|
+
|
111
|
+
} natsServerInfo;
|
112
|
+
|
113
|
+
typedef struct __natsSSLCtx
|
114
|
+
{
|
115
|
+
natsMutex *lock;
|
116
|
+
int refs;
|
117
|
+
SSL_CTX *ctx;
|
118
|
+
char *expectedHostname;
|
119
|
+
bool skipVerify;
|
120
|
+
|
121
|
+
} natsSSLCtx;
|
122
|
+
|
123
|
+
#define natsSSLCtx_getExpectedHostname(ctx) ((ctx)->expectedHostname)
|
124
|
+
|
125
|
+
typedef struct
|
126
|
+
{
|
127
|
+
natsEvLoop_Attach attach;
|
128
|
+
natsEvLoop_ReadAddRemove read;
|
129
|
+
natsEvLoop_WriteAddRemove write;
|
130
|
+
natsEvLoop_Detach detach;
|
131
|
+
|
132
|
+
} natsEvLoopCallbacks;
|
133
|
+
|
134
|
+
struct __natsOptions
|
135
|
+
{
|
136
|
+
// This field must be the first (see natsOptions_clone, same if you add
|
137
|
+
// allocated fields such as strings).
|
138
|
+
natsMutex *mu;
|
139
|
+
|
140
|
+
char *url;
|
141
|
+
char **servers;
|
142
|
+
int serversCount;
|
143
|
+
bool noRandomize;
|
144
|
+
int64_t timeout;
|
145
|
+
char *name;
|
146
|
+
bool verbose;
|
147
|
+
bool pedantic;
|
148
|
+
bool allowReconnect;
|
149
|
+
bool secure;
|
150
|
+
int maxReconnect;
|
151
|
+
int64_t reconnectWait;
|
152
|
+
int reconnectBufSize;
|
153
|
+
|
154
|
+
char *user;
|
155
|
+
char *password;
|
156
|
+
char *token;
|
157
|
+
|
158
|
+
natsConnectionHandler closedCb;
|
159
|
+
void *closedCbClosure;
|
160
|
+
|
161
|
+
natsConnectionHandler disconnectedCb;
|
162
|
+
void *disconnectedCbClosure;
|
163
|
+
|
164
|
+
natsConnectionHandler reconnectedCb;
|
165
|
+
void *reconnectedCbClosure;
|
166
|
+
|
167
|
+
natsErrHandler asyncErrCb;
|
168
|
+
void *asyncErrCbClosure;
|
169
|
+
|
170
|
+
int64_t pingInterval;
|
171
|
+
int maxPingsOut;
|
172
|
+
int maxPendingMsgs;
|
173
|
+
|
174
|
+
natsSSLCtx *sslCtx;
|
175
|
+
|
176
|
+
void *evLoop;
|
177
|
+
natsEvLoopCallbacks evCbs;
|
178
|
+
|
179
|
+
bool libMsgDelivery;
|
180
|
+
|
181
|
+
int orderIP; // possible values: 0,4,6,46,64
|
182
|
+
|
183
|
+
};
|
184
|
+
|
185
|
+
typedef struct __natsMsgList
|
186
|
+
{
|
187
|
+
natsMsg *head;
|
188
|
+
natsMsg *tail;
|
189
|
+
int msgs;
|
190
|
+
int bytes;
|
191
|
+
|
192
|
+
} natsMsgList;
|
193
|
+
|
194
|
+
typedef struct __natsMsgDlvWorker
|
195
|
+
{
|
196
|
+
natsMutex *lock;
|
197
|
+
natsCondition *cond;
|
198
|
+
natsThread *thread;
|
199
|
+
bool inWait;
|
200
|
+
bool shutdown;
|
201
|
+
natsMsgList msgList;
|
202
|
+
|
203
|
+
} natsMsgDlvWorker;
|
204
|
+
|
205
|
+
struct __natsSubscription
|
206
|
+
{
|
207
|
+
natsMutex *mu;
|
208
|
+
|
209
|
+
int refs;
|
210
|
+
|
211
|
+
// This is non-zero when auto-unsubscribe is used.
|
212
|
+
uint64_t max;
|
213
|
+
|
214
|
+
// This is updated in the delivery thread (or NextMsg) and indicates
|
215
|
+
// how many message have been presented to the callback (or returned
|
216
|
+
// from NextMsg). Like 'msgs', this is also used to determine if we
|
217
|
+
// have reached the max number of messages.
|
218
|
+
uint64_t delivered;
|
219
|
+
|
220
|
+
// The list of messages waiting to be delivered to the callback (or
|
221
|
+
// returned from NextMsg).
|
222
|
+
natsMsgList msgList;
|
223
|
+
|
224
|
+
// True if msgList.count is over pendingMax
|
225
|
+
bool slowConsumer;
|
226
|
+
|
227
|
+
// Condition variable used to wait for message delivery.
|
228
|
+
natsCondition *cond;
|
229
|
+
|
230
|
+
// This is > 0 when the delivery thread (or NextMsg) goes into a
|
231
|
+
// condition wait.
|
232
|
+
int inWait;
|
233
|
+
|
234
|
+
// The subscriber is closed (or closing).
|
235
|
+
bool closed;
|
236
|
+
|
237
|
+
// If true, the subscription is closed, but because the connection
|
238
|
+
// was closed, not because of subscription (auto-)unsubscribe.
|
239
|
+
bool connClosed;
|
240
|
+
|
241
|
+
// Subscriber id. Assigned during the creation, does not change after that.
|
242
|
+
int64_t sid;
|
243
|
+
|
244
|
+
// Subject that represents this subscription. This can be different
|
245
|
+
// than the received subject inside a Msg if this is a wildcard.
|
246
|
+
char *subject;
|
247
|
+
|
248
|
+
// Optional queue group name. If present, all subscriptions with the
|
249
|
+
// same name will form a distributed queue, and each message will
|
250
|
+
// only be processed by one member of the group.
|
251
|
+
char *queue;
|
252
|
+
|
253
|
+
// Reference to the connection that created this subscription.
|
254
|
+
struct __natsConnection *conn;
|
255
|
+
|
256
|
+
// Delivery thread (for async subscription).
|
257
|
+
natsThread *deliverMsgsThread;
|
258
|
+
|
259
|
+
// If message delivery is done by the library instead, this is the
|
260
|
+
// reference to the worker handling this subscription.
|
261
|
+
natsMsgDlvWorker *libDlvWorker;
|
262
|
+
|
263
|
+
// Message callback and closure (for async subscription).
|
264
|
+
natsMsgHandler msgCb;
|
265
|
+
void *msgCbClosure;
|
266
|
+
|
267
|
+
int64_t timeout;
|
268
|
+
natsTimer *timeoutTimer;
|
269
|
+
bool timedOut;
|
270
|
+
bool timeoutSuspended;
|
271
|
+
|
272
|
+
// Pending limits, etc..
|
273
|
+
int msgsMax;
|
274
|
+
int bytesMax;
|
275
|
+
int msgsLimit;
|
276
|
+
int bytesLimit;
|
277
|
+
int64_t dropped;
|
278
|
+
|
279
|
+
};
|
280
|
+
|
281
|
+
typedef struct __natsPong
|
282
|
+
{
|
283
|
+
int64_t id;
|
284
|
+
|
285
|
+
struct __natsPong *prev;
|
286
|
+
struct __natsPong *next;
|
287
|
+
|
288
|
+
} natsPong;
|
289
|
+
|
290
|
+
typedef struct __natsPongList
|
291
|
+
{
|
292
|
+
natsPong *head;
|
293
|
+
natsPong *tail;
|
294
|
+
|
295
|
+
int64_t incoming;
|
296
|
+
int64_t outgoingPings;
|
297
|
+
|
298
|
+
natsPong cached;
|
299
|
+
|
300
|
+
natsCondition *cond;
|
301
|
+
|
302
|
+
} natsPongList;
|
303
|
+
|
304
|
+
typedef struct __natsSockCtx
|
305
|
+
{
|
306
|
+
natsSock fd;
|
307
|
+
bool fdActive;
|
308
|
+
|
309
|
+
// We switch to blocking socket after receiving the PONG to the first PING
|
310
|
+
// during the connect process. Should we make all read/writes non blocking,
|
311
|
+
// then we will use two different fd sets, and also probably pass deadlines
|
312
|
+
// individually as opposed to use one at the connection level.
|
313
|
+
fd_set *fdSet;
|
314
|
+
#ifdef _WIN32
|
315
|
+
fd_set *errSet;
|
316
|
+
#endif
|
317
|
+
natsDeadline deadline;
|
318
|
+
|
319
|
+
SSL *ssl;
|
320
|
+
|
321
|
+
// This is true when we are using an external event loop (such as libuv).
|
322
|
+
bool useEventLoop;
|
323
|
+
|
324
|
+
int orderIP; // possible values: 0,4,6,46,64
|
325
|
+
|
326
|
+
} natsSockCtx;
|
327
|
+
|
328
|
+
struct __natsConnection
|
329
|
+
{
|
330
|
+
natsMutex *mu;
|
331
|
+
natsOptions *opts;
|
332
|
+
const natsUrl *url;
|
333
|
+
|
334
|
+
int refs;
|
335
|
+
|
336
|
+
natsSockCtx sockCtx;
|
337
|
+
|
338
|
+
natsSrvPool *srvPool;
|
339
|
+
|
340
|
+
natsBuffer *pending;
|
341
|
+
bool usePending;
|
342
|
+
|
343
|
+
natsBuffer *bw;
|
344
|
+
natsBuffer *scratch;
|
345
|
+
|
346
|
+
natsServerInfo info;
|
347
|
+
|
348
|
+
int64_t ssid;
|
349
|
+
natsHash *subs;
|
350
|
+
|
351
|
+
natsConnStatus status;
|
352
|
+
natsStatus err;
|
353
|
+
char errStr[256];
|
354
|
+
|
355
|
+
natsParser *ps;
|
356
|
+
natsTimer *ptmr;
|
357
|
+
int pout;
|
358
|
+
|
359
|
+
natsPongList pongs;
|
360
|
+
|
361
|
+
natsThread *readLoopThread;
|
362
|
+
|
363
|
+
natsThread *flusherThread;
|
364
|
+
natsCondition *flusherCond;
|
365
|
+
bool flusherSignaled;
|
366
|
+
bool flusherStop;
|
367
|
+
|
368
|
+
natsThread *reconnectThread;
|
369
|
+
|
370
|
+
natsStatistics stats;
|
371
|
+
|
372
|
+
struct
|
373
|
+
{
|
374
|
+
bool attached;
|
375
|
+
bool writeAdded;
|
376
|
+
void *buffer;
|
377
|
+
void *data;
|
378
|
+
} el;
|
379
|
+
};
|
380
|
+
|
381
|
+
//
|
382
|
+
// Library
|
383
|
+
//
|
384
|
+
void
|
385
|
+
natsSys_Init(void);
|
386
|
+
|
387
|
+
void
|
388
|
+
natsLib_Retain(void);
|
389
|
+
|
390
|
+
void
|
391
|
+
natsLib_Release(void);
|
392
|
+
|
393
|
+
void
|
394
|
+
nats_resetTimer(natsTimer *t, int64_t newInterval);
|
395
|
+
|
396
|
+
void
|
397
|
+
nats_stopTimer(natsTimer *t);
|
398
|
+
|
399
|
+
// Returns the number of timers that have been created and not stopped.
|
400
|
+
int
|
401
|
+
nats_getTimersCount(void);
|
402
|
+
|
403
|
+
// Returns the number of timers actually in the list. This should be
|
404
|
+
// equal to nats_getTimersCount() or nats_getTimersCount() - 1 when a
|
405
|
+
// timer thread is invoking a timer's callback.
|
406
|
+
int
|
407
|
+
nats_getTimersCountInList(void);
|
408
|
+
|
409
|
+
natsStatus
|
410
|
+
nats_postAsyncCbInfo(natsAsyncCbInfo *info);
|
411
|
+
|
412
|
+
void
|
413
|
+
nats_sslRegisterThreadForCleanup(void);
|
414
|
+
|
415
|
+
natsStatus
|
416
|
+
nats_sslInit(void);
|
417
|
+
|
418
|
+
natsStatus
|
419
|
+
natsInbox_init(char *inbox, int inboxLen);
|
420
|
+
|
421
|
+
natsStatus
|
422
|
+
natsLib_msgDeliveryPostControlMsg(natsSubscription *sub);
|
423
|
+
|
424
|
+
natsStatus
|
425
|
+
natsLib_msgDeliveryAssignWorker(natsSubscription *sub);
|
426
|
+
|
427
|
+
bool
|
428
|
+
natsLib_isLibHandlingMsgDeliveryByDefault(void);
|
429
|
+
|
430
|
+
void
|
431
|
+
natsLib_getMsgDeliveryPoolInfo(int *maxSize, int *size, int *idx, natsMsgDlvWorker ***workersArray);
|
432
|
+
|
433
|
+
//
|
434
|
+
// Threads
|
435
|
+
//
|
436
|
+
typedef void (*natsThreadCb)(void *arg);
|
437
|
+
|
438
|
+
natsStatus
|
439
|
+
natsThread_Create(natsThread **t, natsThreadCb cb, void *arg);
|
440
|
+
|
441
|
+
bool
|
442
|
+
natsThread_IsCurrent(natsThread *t);
|
443
|
+
|
444
|
+
void
|
445
|
+
natsThread_Join(natsThread *t);
|
446
|
+
|
447
|
+
void
|
448
|
+
natsThread_Detach(natsThread *t);
|
449
|
+
|
450
|
+
void
|
451
|
+
natsThread_Yield(void);
|
452
|
+
|
453
|
+
void
|
454
|
+
natsThread_Destroy(natsThread *t);
|
455
|
+
|
456
|
+
natsStatus
|
457
|
+
natsThreadLocal_CreateKey(natsThreadLocal *tl, void (*destructor)(void*));
|
458
|
+
|
459
|
+
void*
|
460
|
+
natsThreadLocal_Get(natsThreadLocal tl);
|
461
|
+
|
462
|
+
#define natsThreadLocal_Set(k, v) natsThreadLocal_SetEx((k), (v), true)
|
463
|
+
|
464
|
+
natsStatus
|
465
|
+
natsThreadLocal_SetEx(natsThreadLocal tl, const void *value, bool setErr);
|
466
|
+
|
467
|
+
void
|
468
|
+
natsThreadLocal_DestroyKey(natsThreadLocal tl);
|
469
|
+
|
470
|
+
bool
|
471
|
+
nats_InitOnce(natsInitOnceType *control, natsInitOnceCb cb);
|
472
|
+
|
473
|
+
|
474
|
+
//
|
475
|
+
// Conditions
|
476
|
+
//
|
477
|
+
natsStatus
|
478
|
+
natsCondition_Create(natsCondition **cond);
|
479
|
+
|
480
|
+
void
|
481
|
+
natsCondition_Wait(natsCondition *cond, natsMutex *mutex);
|
482
|
+
|
483
|
+
natsStatus
|
484
|
+
natsCondition_TimedWait(natsCondition *cond, natsMutex *mutex, int64_t timeout);
|
485
|
+
|
486
|
+
natsStatus
|
487
|
+
natsCondition_AbsoluteTimedWait(natsCondition *cond, natsMutex *mutex,
|
488
|
+
int64_t absoluteTime);
|
489
|
+
|
490
|
+
void
|
491
|
+
natsCondition_Signal(natsCondition *cond);
|
492
|
+
|
493
|
+
void
|
494
|
+
natsCondition_Broadcast(natsCondition *cond);
|
495
|
+
|
496
|
+
void
|
497
|
+
natsCondition_Destroy(natsCondition *cond);
|
498
|
+
|
499
|
+
//
|
500
|
+
// Mutexes
|
501
|
+
//
|
502
|
+
natsStatus
|
503
|
+
natsMutex_Create(natsMutex **newMutex);
|
504
|
+
|
505
|
+
void
|
506
|
+
natsMutex_Lock(natsMutex *m);
|
507
|
+
|
508
|
+
bool
|
509
|
+
natsMutex_TryLock(natsMutex *m);
|
510
|
+
|
511
|
+
void
|
512
|
+
natsMutex_Unlock(natsMutex *m);
|
513
|
+
|
514
|
+
void
|
515
|
+
natsMutex_Destroy(natsMutex *m);
|
516
|
+
|
517
|
+
|
518
|
+
#endif /* NATSP_H_ */
|