From 2524e268935dd8bf42596855bea027222b1344a1 Mon Sep 17 00:00:00 2001 From: Pieter Hintjens Date: Wed, 25 Jun 2014 12:47:39 +0200 Subject: [PATCH 1/2] Code cleanups --- src/socket_base.cpp | 42 +++++++++++++----------------------------- src/thread.cpp | 15 ++++++--------- src/ypipe.hpp | 6 +++--- 3 files changed, 22 insertions(+), 41 deletions(-) diff --git a/src/socket_base.cpp b/src/socket_base.cpp index 578423c6..fb404d76 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -189,9 +189,13 @@ int zmq::socket_base_t::parse_uri (const char *uri_, int zmq::socket_base_t::check_protocol (const std::string &protocol_) { // First check out whether the protcol is something we are aware of. - if (protocol_ != "inproc" && protocol_ != "ipc" && protocol_ != "tcp" && - protocol_ != "pgm" && protocol_ != "epgm" && protocol_ != "tipc" && - protocol_ != "norm") { + if (protocol_ != "inproc" + && protocol_ != "ipc" + && protocol_ != "tcp" + && protocol_ != "pgm" + && protocol_ != "epgm" + && protocol_ != "tipc" + && protocol_ != "norm") { errno = EPROTONOSUPPORT; return -1; } @@ -356,12 +360,7 @@ int zmq::socket_base_t::bind (const char *addr_) // Parse addr_ string. std::string protocol; std::string address; - rc = parse_uri (addr_, protocol, address); - if (rc != 0) - return -1; - - rc = check_protocol (protocol); - if (rc != 0) + if (parse_uri (addr_, protocol, address) || check_protocol (protocol)) return -1; if (protocol == "inproc") { @@ -464,12 +463,7 @@ int zmq::socket_base_t::connect (const char *addr_) // Parse addr_ string. std::string protocol; std::string address; - rc = parse_uri (addr_, protocol, address); - if (rc != 0) - return -1; - - rc = check_protocol (protocol); - if (rc != 0) + if (parse_uri (addr_, protocol, address) || check_protocol (protocol)) return -1; if (protocol == "inproc") { @@ -743,12 +737,7 @@ int zmq::socket_base_t::term_endpoint (const char *addr_) // Parse addr_ string. std::string protocol; std::string address; - rc = parse_uri (addr_, protocol, address); - if (rc != 0) - return -1; - - rc = check_protocol (protocol); - if (rc != 0) + if (parse_uri (addr_, protocol, address) || check_protocol (protocol)) return -1; // Disconnect an inproc socket @@ -1222,12 +1211,7 @@ int zmq::socket_base_t::monitor (const char *addr_, int events_) // Parse addr_ string. std::string protocol; std::string address; - int rc = parse_uri (addr_, protocol, address); - if (rc != 0) - return -1; - - rc = check_protocol (protocol); - if (rc != 0) + if (parse_uri (addr_, protocol, address) || check_protocol (protocol)) return -1; // Event notification only supported over inproc:// @@ -1243,9 +1227,9 @@ int zmq::socket_base_t::monitor (const char *addr_, int events_) // Never block context termination on pending event messages int linger = 0; - rc = zmq_setsockopt (monitor_socket, ZMQ_LINGER, &linger, sizeof (linger)); + int rc = zmq_setsockopt (monitor_socket, ZMQ_LINGER, &linger, sizeof (linger)); if (rc == -1) - stop_monitor (); + stop_monitor (); // Spawn the monitor socket endpoint rc = zmq_bind (monitor_socket, addr_); diff --git a/src/thread.cpp b/src/thread.cpp index 2dcd2616..af010460 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -84,13 +84,11 @@ extern "C" } } -bool getenvi(const char *env_, int &result_) +bool getenvi (const char *env_, int &result_) { - char *str = getenv(env_); - if(str == NULL) - { + char *str = getenv (env_); + if (str == NULL) return false; - } std::stringstream ss(str); return ss >> result_; @@ -104,14 +102,13 @@ void zmq::thread_t::start (thread_fn *tfn_, void *arg_) posix_assert (rc); int prio; - if(getenvi("ZMQ_THREAD_PRIO", prio)) - { + if (getenvi ("ZMQ_THREAD_PRIO", prio)) { int policy = SCHED_RR; - getenvi("ZMQ_THREAD_POLICY", policy); + getenvi ("ZMQ_THREAD_POLICY", policy); struct sched_param param; param.sched_priority = prio; - rc = pthread_setschedparam(descriptor, policy, ¶m); + rc = pthread_setschedparam (descriptor, policy, ¶m); posix_assert (rc); } } diff --git a/src/ypipe.hpp b/src/ypipe.hpp index c580ce24..8a6b0544 100644 --- a/src/ypipe.hpp +++ b/src/ypipe.hpp @@ -168,10 +168,10 @@ namespace zmq // The pipe mustn't be empty or the function crashes. inline bool probe (bool (*fn)(const T &)) { - bool rc = check_read (); - zmq_assert (rc); + bool rc = check_read (); + zmq_assert (rc); - return (*fn) (queue.front ()); + return (*fn) (queue.front ()); } protected: From ce8fbb26cb864c8e55978a614743d88019aeda4a Mon Sep 17 00:00:00 2001 From: Pieter Hintjens Date: Wed, 25 Jun 2014 12:48:26 +0200 Subject: [PATCH 2/2] Problem: zmq_connect doesn't return EINVAL on invalid endpoint Solution: set errno to EINVAL when tcp:// endpoint is invalid (was just leaving errno to previous value). --- src/socket_base.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/socket_base.cpp b/src/socket_base.cpp index fb404d76..a3592b22 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -619,6 +619,7 @@ int zmq::socket_base_t::connect (const char *addr_) } } if (rc == -1) { + errno = EINVAL; delete paddr; return -1; }