From 6b24581263591cd0e82cb68c6ce3e853897c94cb Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 2 May 2018 08:56:03 +1000 Subject: [PATCH] Add debugging and sanity checks to send_json_msg. --- src/ckpool.c | 21 ++++++++++++++++++--- src/ckpool.h | 3 ++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/ckpool.c b/src/ckpool.c index 2cb0565e..791a462a 100644 --- a/src/ckpool.c +++ b/src/ckpool.c @@ -961,21 +961,36 @@ static void terminate_oldpid(const ckpool_t *ckp, proc_instance_t *pi, const pid } /* This is for blocking sends of json messages */ -bool send_json_msg(connsock_t *cs, const json_t *json_msg) +bool _send_json_msg(connsock_t *cs, const json_t *json_msg, const char *file, const char *func, const int line) { + bool ret = false; int len, sent; char *s; + if (unlikely(!json_msg)) { + LOGWARNING("Empty json msg in send_json_msg from %s %s:%d", file, func, line); + goto out; + } s = json_dumps(json_msg, JSON_ESCAPE_SLASH | JSON_EOL); + if (unlikely(!s)) { + LOGWARNING("Empty json dump in send_json_msg from %s %s:%d", file, func, line); + goto out; + } LOGDEBUG("Sending json msg: %s", s); len = strlen(s); + if (unlikely(!len)) { + LOGWARNING("Zero length string in send_json_msg from %s %s:%d", file, func, line); + goto out; + } sent = write_socket(cs->fd, s, len); dealloc(s); if (sent != len) { LOGNOTICE("Failed to send %d bytes sent %d in send_json_msg", len, sent); - return false; + goto out; } - return true; + ret = true; +out: + return ret; } /* Decode a string that should have a json message and return just the contents diff --git a/src/ckpool.h b/src/ckpool.h index 1594f6cc..47e5612e 100644 --- a/src/ckpool.h +++ b/src/ckpool.h @@ -372,7 +372,8 @@ char *_ckdb_msg_call(const ckpool_t *ckp, const char *msg, const char *file, co json_t *json_rpc_call(connsock_t *cs, const char *rpc_req); json_t *json_rpc_response(connsock_t *cs, const char *rpc_req); void json_rpc_msg(connsock_t *cs, const char *rpc_req); -bool send_json_msg(connsock_t *cs, const json_t *json_msg); +bool _send_json_msg(connsock_t *cs, const json_t *json_msg, const char *file, const char *func, const int line); +#define send_json_msg(CS, JSON_MSG) _send_json_msg(CS, JSON_MSG, __FILE__, __func__, __LINE__) json_t *json_result(json_t *val); json_t *json_errval(json_t *val); json_t *json_msg_result(const char *msg, json_t **res_val, json_t **err_val);