aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/msgqueue.c9
-rw-r--r--src/core/msgqueue.h6
-rw-r--r--src/core/protocol.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/core/msgqueue.c b/src/core/msgqueue.c
index 0f1872dc..a95057d2 100644
--- a/src/core/msgqueue.c
+++ b/src/core/msgqueue.c
@@ -323,6 +323,15 @@ nni_msgq_put(nni_msgq *mq, nni_msg *msg)
int
+nni_msgq_tryput(nni_msgq *mq, nni_msg *msg)
+{
+ nni_signal nosig = 0;
+
+ return (nni_msgq_put_(mq, msg, NNI_TIME_ZERO, &nosig));
+}
+
+
+int
nni_msgq_put_sig(nni_msgq *mq, nni_msg *msg, nni_signal *signal)
{
return (nni_msgq_put_(mq, msg, NNI_TIME_NEVER, signal));
diff --git a/src/core/msgqueue.h b/src/core/msgqueue.h
index 9ee4335a..6454e1df 100644
--- a/src/core/msgqueue.h
+++ b/src/core/msgqueue.h
@@ -43,8 +43,12 @@ extern void nni_msgq_fini(nni_msgq *);
// the caller is not permitted to access it further.
extern int nni_msgq_put(nni_msgq *, nni_msg *);
+// nni_msgq_tryput is like nni_msgq_put, except that it does not block,
+// if there is no room to put the message it simply returns NNG_EAGAIN.
+extern int nni_msgq_tryput(nni_msgq *, nni_msg *);
+
// nni_msgq_putback returns a message to the head of the queue.
-// This is a non-blocking operation, and it returns EAGAIN if there
+// This is a non-blocking operation, and it returns NNG_EAGAIN if there
// is no room. There is always at least room for one putback after
// a message is retried with nni_msgq_get.
extern int nni_msgq_putback(nni_msgq *, nni_msg *);
diff --git a/src/core/protocol.c b/src/core/protocol.c
index 765c2e9a..9b20a4fb 100644
--- a/src/core/protocol.c
+++ b/src/core/protocol.c
@@ -19,12 +19,14 @@
extern nni_proto nni_pair_proto;
extern nni_proto nni_rep_proto;
extern nni_proto nni_req_proto;
+extern nni_proto nni_pub_proto;
extern nni_proto nni_sub_proto;
static nni_proto *protocols[] = {
&nni_pair_proto,
&nni_rep_proto,
&nni_req_proto,
+ &nni_pub_proto,
&nni_sub_proto,
NULL
};