From cc5d31605fddc9888f3b30933fbd4ec3272299ab Mon Sep 17 00:00:00 2001 From: Steven McCoy Date: Tue, 4 Oct 2011 09:32:02 +0200 Subject: Re-add PGM rate limiting It was accidently lost in commit fcfad5682e, equivalent to commits 2ddb106 & b62dd40 in version 2.1. Changes semantics from TXW_MAX_RATE to ODATA_MAX_RATE. Signed-off-by: Steven McCoy --- src/pgm_socket.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pgm_socket.cpp b/src/pgm_socket.cpp index 5bf49d0..378370c 100644 --- a/src/pgm_socket.cpp +++ b/src/pgm_socket.cpp @@ -222,6 +222,7 @@ int zmq::pgm_socket_t::init (bool udp_encapsulation_, const char *network_) goto err_abort; } else { const int send_only = 1, + max_rte = (int) ((options.rate * 1000) / 8), txw_max_tpdu = (int) pgm_max_tpdu, txw_sqns = compute_sqns (txw_max_tpdu), ambient_spm = pgm_secs (30), @@ -237,6 +238,8 @@ int zmq::pgm_socket_t::init (bool udp_encapsulation_, const char *network_) if (!pgm_setsockopt (sock, IPPROTO_PGM, PGM_SEND_ONLY, &send_only, sizeof (send_only)) || + !pgm_setsockopt (sock, IPPROTO_PGM, PGM_ODATA_MAX_RTE, + &max_rte, sizeof (max_rte)) || !pgm_setsockopt (sock, IPPROTO_PGM, PGM_TXW_SQNS, &txw_sqns, sizeof (txw_sqns)) || !pgm_setsockopt (sock, IPPROTO_PGM, PGM_AMBIENT_SPM, -- cgit v1.2.3 From f5f1a8b1841f04fc9db5df3eb669d76513687065 Mon Sep 17 00:00:00 2001 From: Steven McCoy Date: Tue, 4 Oct 2011 09:39:55 +0200 Subject: New upstream OpenPGM maintenance release 5.1.118. Signed-off-by: Steven McCoy --- configure.in | 2 +- foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz | Bin 1054630 -> 0 bytes foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz | Bin 0 -> 1046589 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz create mode 100644 foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz diff --git a/configure.in b/configure.in index 4065252..ed8fa14 100644 --- a/configure.in +++ b/configure.in @@ -274,7 +274,7 @@ AC_C_VOLATILE # PGM extension libzmq_pgm_ext="no" -pgm_basename="libpgm-5.1.115~dfsg" +pgm_basename="libpgm-5.1.118~dfsg" AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm], [build libzmq with PGM extension [default=no]])], diff --git a/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz b/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz deleted file mode 100644 index a0c5b7a..0000000 Binary files a/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz and /dev/null differ diff --git a/foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz b/foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz new file mode 100644 index 0000000..92f1707 Binary files /dev/null and b/foreign/openpgm/libpgm-5.1.118~dfsg.tar.gz differ -- cgit v1.2.3 From d31792e652cc9fd3bc84e2abd89f232d273b7ede Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Thu, 6 Oct 2011 13:12:49 +0200 Subject: Default HWMs are set to 1000 This patch is meant to prevent users from running out of memory when using 0MQ in the default configuration. Signed-off-by: Martin Sustrik --- doc/zmq_getsockopt.txt | 8 ++------ doc/zmq_setsockopt.txt | 8 ++------ src/options.cpp | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/doc/zmq_getsockopt.txt b/doc/zmq_getsockopt.txt index ba85ab3..99065c0 100644 --- a/doc/zmq_getsockopt.txt +++ b/doc/zmq_getsockopt.txt @@ -81,12 +81,10 @@ blocking or dropping sent messages. Refer to the individual socket descriptions in linkzmq:zmq_socket[3] for details on the exact action taken for each socket type. -The default 'ZMQ_SNDHWM' value of zero means "no limit". - [horizontal] Option value type:: int Option value unit:: messages -Default value:: 0 +Default value:: 1000 Applicable socket types:: all @@ -103,12 +101,10 @@ blocking or dropping sent messages. Refer to the individual socket descriptions in linkzmq:zmq_socket[3] for details on the exact action taken for each socket type. -The default 'ZMQ_RCVHWM' value of zero means "no limit". - [horizontal] Option value type:: int Option value unit:: messages -Default value:: 0 +Default value:: 1000 Applicable socket types:: all diff --git a/doc/zmq_setsockopt.txt b/doc/zmq_setsockopt.txt index b06388c..fd004f4 100644 --- a/doc/zmq_setsockopt.txt +++ b/doc/zmq_setsockopt.txt @@ -38,12 +38,10 @@ blocking or dropping sent messages. Refer to the individual socket descriptions in linkzmq:zmq_socket[3] for details on the exact action taken for each socket type. -The default 'ZMQ_SNDHWM' value of zero means "no limit". - [horizontal] Option value type:: int Option value unit:: messages -Default value:: 0 +Default value:: 1000 Applicable socket types:: all @@ -60,12 +58,10 @@ blocking or dropping sent messages. Refer to the individual socket descriptions in linkzmq:zmq_socket[3] for details on the exact action taken for each socket type. -The default 'ZMQ_RCVHWM' value of zero means "no limit". - [horizontal] Option value type:: int Option value unit:: messages -Default value:: 0 +Default value:: 1000 Applicable socket types:: all diff --git a/src/options.cpp b/src/options.cpp index 89cf429..8a3e527 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -24,8 +24,8 @@ #include "err.hpp" zmq::options_t::options_t () : - sndhwm (0), - rcvhwm (0), + sndhwm (1000), + rcvhwm (1000), affinity (0), rate (100), recovery_ivl (10000), -- cgit v1.2.3 From 6c1b50cfab1529e866e40c037ce1be7027423af0 Mon Sep 17 00:00:00 2001 From: Mikko Koppanen Date: Wed, 26 Oct 2011 11:26:00 +0200 Subject: Added compile-time test for SOCK_CLOEXEC Signed-off-by: Mikko Koppanen --- acinclude.m4 | 22 ++++++++++++++++++++++ configure.in | 5 +++++ src/ip.cpp | 4 ++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 7e96921..537be18 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -581,6 +581,28 @@ AC_DEFUN([LIBZMQ_CHECK_LANG_VISIBILITY], [{ [AC_MSG_RESULT(yes) ; $1], [AC_MSG_RESULT(no) ; $2]) }]) +dnl ################################################################################ +dnl # LIBZMQ_CHECK_SOCK_CLOEXEC([action-if-found], [action-if-not-found]) # +dnl # Check if SOCK_CLOEXEC is supported # +dnl ################################################################################ +AC_DEFUN([LIBZMQ_CHECK_SOCK_CLOEXEC], [{ + AC_MSG_CHECKING(whether SOCK_CLOEXEC is supported) + AC_TRY_RUN([/* SOCK_CLOEXEC test */ +#include +#include + +int main (int argc, char *argv []) +{ + int s = socket (PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); + return (s == -1); +} + ], + [AC_MSG_RESULT(yes) ; libzmq_cv_sock_cloexec="yes" ; $1], + [AC_MSG_RESULT(no) ; libzmq_cv_sock_cloexec="no" ; $2], + [AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_sock_cloexec="no"] + ) +}]) + dnl ################################################################################ dnl # LIBZMQ_CHECK_POLLER_KQUEUE([action-if-found], [action-if-not-found]) # dnl # Checks kqueue polling system # diff --git a/configure.in b/configure.in index ed8fa14..b0ee7a1 100644 --- a/configure.in +++ b/configure.in @@ -383,6 +383,11 @@ AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes") AC_TYPE_SIGNAL AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs) AC_CHECK_HEADERS([alloca.h]) +LIBZMQ_CHECK_SOCK_CLOEXEC([AC_DEFINE( + [ZMQ_HAVE_SOCK_CLOEXEC], + [1], + [Whether SOCK_CLOEXEC is defined and functioning.]) + ]) # Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS AC_SUBST(LIBZMQ_EXTRA_CFLAGS) diff --git a/src/ip.cpp b/src/ip.cpp index b11a244..8090a8a 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -40,7 +40,7 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_) { // Setting this option result in sane behaviour when exec() functions // are used. Old sockets are closed and don't block TCP ports etc. -#if defined SOCK_CLOEXEC +#if defined ZMQ_HAVE_SOCK_CLOEXEC type_ |= SOCK_CLOEXEC; #endif @@ -51,7 +51,7 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_) // If there's no SOCK_CLOEXEC, let's try the second best option. Note that // race condition can cause socket not to be closed (if fork happens // between socket creation and this point). -#if !defined SOCK_CLOEXEC && defined FD_CLOEXEC +#if !defined ZMQ_HAVE_SOCK_CLOEXEC && defined FD_CLOEXEC int rc = fcntl (s, F_SETFD, FD_CLOEXEC); errno_assert (rc != -1); #endif -- cgit v1.2.3 From b3cda2ad6091096264f777a95907050edfdd3ffe Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Thu, 27 Oct 2011 09:41:48 +0200 Subject: Bug in kqueue poller fixed (issue 261) Signed-off-by: Martin Sustrik --- src/kqueue.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/kqueue.cpp b/src/kqueue.cpp index bb42d8f..cbf38d1 100644 --- a/src/kqueue.cpp +++ b/src/kqueue.cpp @@ -33,6 +33,7 @@ #include "err.hpp" #include "config.hpp" #include "i_poll_events.hpp" +#include "likely.hpp" // NetBSD defines (struct kevent).udata as intptr_t, everyone else // as void *. @@ -106,29 +107,37 @@ void zmq::kqueue_t::rm_fd (handle_t handle_) void zmq::kqueue_t::set_pollin (handle_t handle_) { poll_entry_t *pe = (poll_entry_t*) handle_; - pe->flag_pollin = true; - kevent_add (pe->fd, EVFILT_READ, pe); + if (likely (!pe->flag_pollin)) { + pe->flag_pollin = true; + kevent_add (pe->fd, EVFILT_READ, pe); + } } void zmq::kqueue_t::reset_pollin (handle_t handle_) { poll_entry_t *pe = (poll_entry_t*) handle_; - pe->flag_pollin = false; - kevent_delete (pe->fd, EVFILT_READ); + if (likely (pe->flag_pollin)) { + pe->flag_pollin = false; + kevent_delete (pe->fd, EVFILT_READ); + } } void zmq::kqueue_t::set_pollout (handle_t handle_) { poll_entry_t *pe = (poll_entry_t*) handle_; - pe->flag_pollout = true; - kevent_add (pe->fd, EVFILT_WRITE, pe); + if (likely (!pe->flag_pollout)) { + pe->flag_pollout = true; + kevent_add (pe->fd, EVFILT_WRITE, pe); + } } void zmq::kqueue_t::reset_pollout (handle_t handle_) { poll_entry_t *pe = (poll_entry_t*) handle_; - pe->flag_pollout = false; - kevent_delete (pe->fd, EVFILT_WRITE); + if (likely (pe->flag_pollout)) { + pe->flag_pollout = false; + kevent_delete (pe->fd, EVFILT_WRITE); + } } void zmq::kqueue_t::start () -- cgit v1.2.3