From 4ab09181c3496d900c46396299a5023b65a2b2aa Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 9 Jan 2011 17:16:07 -0500 Subject: [PATCH] Add send_node_release; no need for inc/decref when using post_node --- server/main.c | 2 -- server/meta.c | 2 -- server/node.c | 15 +++++++++------ server/node.h | 1 + server/relay.c | 2 -- server/subscription.c | 2 -- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/server/main.c b/server/main.c index c6b0c24..e04d8c2 100644 --- a/server/main.c +++ b/server/main.c @@ -58,9 +58,7 @@ static void factory_handle_message(node_t *n, sexp_t *m) { } else { reply = sexp_cons(sexp_cstring("create-failed"), sexp_cons(error, NULL)); } - INCREF(reply); post_node(sexp_data(reply_sink), sexp_data(reply_name), reply, sexp_empty_bytes); - DECREF(reply, sexp_destructor); } } return; diff --git a/server/meta.c b/server/meta.c index 36e4ac9..17074f1 100644 --- a/server/meta.c +++ b/server/meta.c @@ -39,8 +39,6 @@ void announce_subscription(sexp_t *source, msg = sexp_cons(filter, msg); msg = sexp_cons(source, msg); msg = sexp_cons(sexp_cstring(onoff ? "subscribed" : "unsubscribed"), msg); - INCREF(msg); post_node(sexp_data(meta_sym), sexp_data(source), msg, NULL); - DECREF(msg, sexp_destructor); } } diff --git a/server/node.c b/server/node.c index fc7bace..25da8fe 100644 --- a/server/node.c +++ b/server/node.c @@ -159,7 +159,6 @@ void unbind_all_names_for_node(node_t *n) { int post_node(cmsg_bytes_t node, cmsg_bytes_t name, sexp_t *body, sexp_t *token) { static sexp_t *post_atom = NULL; sexp_t *msg = NULL; - int result; if (post_atom == NULL) { post_atom = INCREF(sexp_cstring("post")); @@ -169,11 +168,7 @@ int post_node(cmsg_bytes_t node, cmsg_bytes_t name, sexp_t *body, sexp_t *token) msg = sexp_cons(body, msg); msg = sexp_cons(sexp_bytes(name), msg); msg = sexp_cons(post_atom, msg); - INCREF(msg); - result = send_node(node, msg); - DECREF(msg, sexp_destructor); - - return result; + return send_node_release(node, msg); } int send_node(cmsg_bytes_t node, sexp_t *message) { @@ -184,3 +179,11 @@ int send_node(cmsg_bytes_t node, sexp_t *message) { n->node_class->handle_message(n, message); return 1; } + +int send_node_release(cmsg_bytes_t node, sexp_t *message) { + int result; + INCREF(message); + result = send_node(node, message); + DECREF(message, sexp_destructor); + return result; +} diff --git a/server/node.h b/server/node.h index 172e11b..8df80b7 100644 --- a/server/node.h +++ b/server/node.h @@ -40,5 +40,6 @@ extern void unbind_all_names_for_node(node_t *n); extern int post_node(cmsg_bytes_t node, cmsg_bytes_t name, sexp_t *body, sexp_t *token); extern int send_node(cmsg_bytes_t node, sexp_t *message); +extern int send_node_release(cmsg_bytes_t node, sexp_t *message); #endif diff --git a/server/relay.c b/server/relay.c index 964dfe0..b5f73b4 100644 --- a/server/relay.c +++ b/server/relay.c @@ -164,9 +164,7 @@ static void relay_main(node_t *n) { sexp_t *reply_name = sexp_listref(args, 4); if (bind_node(filter, n)) { sexp_t *subok = sexp_cons(sexp_cstring("subscribe-ok"), sexp_cons(filter_sexp, NULL)); - INCREF(subok); post_node(sexp_data(reply_sink), sexp_data(reply_name), subok, sexp_empty_bytes); - DECREF(subok, sexp_destructor); DECREF(r->remote_container_name, sexp_destructor); r->remote_container_name = INCREF(filter_sexp); diff --git a/server/subscription.c b/server/subscription.c index 5c0ed96..6d42b71 100644 --- a/server/subscription.c +++ b/server/subscription.c @@ -114,9 +114,7 @@ subscription_t *handle_subscribe_message(sexp_t *source, { sexp_t *subok = sexp_cons(sexp_cstring("subscribe-ok"), sexp_cons(sub->uuid, NULL)); - INCREF(subok); post_node(sexp_data(reply_sink), sexp_data(reply_name), subok, sexp_empty_bytes); - DECREF(subok, sexp_destructor); } return sub;