aboutsummaryrefslogtreecommitdiff
path: root/lib/libnetgraph/msg.c
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2019-05-10 16:43:47 +0000
committerMark Johnston <markj@FreeBSD.org>2019-05-10 16:43:47 +0000
commit7f75bbd0662b0ec96bc673515154601628dba3b3 (patch)
tree4eb5d1d51411b9e3cfe64eea8cba31b7e98d8dd0 /lib/libnetgraph/msg.c
parent0f78871d44e7e5d8cfd600d06caf9116d937fd50 (diff)
Notes
Diffstat (limited to 'lib/libnetgraph/msg.c')
-rw-r--r--lib/libnetgraph/msg.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/libnetgraph/msg.c b/lib/libnetgraph/msg.c
index c94645997acb..061bdc233ff5 100644
--- a/lib/libnetgraph/msg.c
+++ b/lib/libnetgraph/msg.c
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/socket.h>
#include <stdarg.h>
+#include <stdatomic.h>
#include <netgraph/ng_message.h>
#include <netgraph/ng_socket.h>
@@ -51,7 +52,7 @@ __FBSDID("$FreeBSD$");
#include "internal.h"
/* Next message token value */
-static int gMsgId;
+static _Atomic(unsigned int) gMsgId;
/* For delivering both messages and replies */
static int NgDeliverMsg(int cs, const char *path,
@@ -72,9 +73,7 @@ NgSendMsg(int cs, const char *path,
memset(&msg, 0, sizeof(msg));
msg.header.version = NG_VERSION;
msg.header.typecookie = cookie;
- if (++gMsgId < 0)
- gMsgId = 1;
- msg.header.token = gMsgId;
+ msg.header.token = atomic_fetch_add(&gMsgId, 1) & INT_MAX;
msg.header.flags = NGF_ORIG;
msg.header.cmd = cmd;
snprintf((char *)msg.header.cmdstr, NG_CMDSTRSIZ, "cmd%d", cmd);
@@ -143,9 +142,7 @@ NgSendAsciiMsg(int cs, const char *path, const char *fmt, ...)
/* Now send binary version */
binary = (struct ng_mesg *)reply->data;
- if (++gMsgId < 0)
- gMsgId = 1;
- binary->header.token = gMsgId;
+ binary->header.token = atomic_fetch_add(&gMsgId, 1) & INT_MAX;
binary->header.version = NG_VERSION;
if (NgDeliverMsg(cs,
path, binary, binary->data, binary->header.arglen) < 0) {