Commit Graph

2939 Commits

Author SHA1 Message Date
Luca Boccassi
cfc9d5f519 Problem: trailing whitespace breaks clang-format-check
Solution: fix issue introduced by #3270
2018-10-08 17:17:13 +01:00
gabm
c1ac158f50 Problem: The flag that indicates the next expected message gets set even if the send fails (#3270)
* ZMQ_DGRAM: flip more flag after successful send

In the dgram socket we have a flag that indicates the next expected message type to ensure that always a pair of "address" + "body" messages gets sent. The first one MUST have the sendmore flag, the second MUST NOT.

In case the message does not get sent because of HWM full, then the function returns EAGAIN as it should. But unfortunately the next expected message type-flag gets flipped as well. When the socket_base::send function now tries to resend the message, it became the wrong message type... If you don't stop sending pairs of messages here (like me) then the next message that gets through will be of the wrong type, which in turn crashes the udp_engine function as described in #3268
2018-10-08 17:14:45 +01:00
Gregory Lemercier
ffe62d3398 Fix build on arm64 architectures with some strict compilers
This patch fixes an issue that occurs on 64-bit architetures under
strict compiler rules. The code initially checked that the received
size stored in 'uint64_t' was not bigger than the max value of a
'size_t' variable, which is legitimate on 32-bit architectures where
'size_t' variables are stored on 32 bits. On 64-bit architectures,
this test no longer makes sense since 'uint64_t' and 'size_t' types
have the same size. The issue is fixed by ignoring this portion
of code when built for arm64.
2018-10-07 18:23:08 +02:00
Luca Boccassi
e0ec6a9b36 Problem: formatting errors introduced by PR #3237
Solution: fix them
2018-08-31 09:37:53 +01:00
Byron Mallett
d8f3b283f8 Added SO_REUSEPORT socket option for UDP recv ports (#3237)
* Added SO_REUSEPORT socket option for UDP multicast recv ports
2018-08-31 09:36:34 +01:00
Aalhad Saraf
3f1f628538 Fix build failure on ARM due to bad variable name
The variable decrement was changed to decrement_
in c581f43c97

In -one- place, it remained as decrement
and gives:

In file included from src/ctx.hpp:44:0,
from src/address.cpp:33:
src/atomic_counter.hpp: In member function 'bool zmq::atomic_counter_t::sub(zmq::atomic_counter_t::integer_t)':
src/atomic_counter.hpp:191:28: error: 'decrement' was not declared in this scope

Changing it to decrement_ fixes the problem.
2018-08-23 17:02:56 +05:30
Luca Boccassi
9f0b83a1d3 Problem: whitespace issue with PR #3227
Solution: fix it to comply with clang-format rules
2018-08-20 15:44:20 +01:00
answeroo
777bd48296 Pgm fix (#3227)
* Relicensing grant by Ming Ji <jiming@yafco.com>

Permission to relicense under any OSI approved license chosen by the current ZeroMQ BDFL.
2018-08-20 15:42:58 +01:00
Luca Boccassi
d7e51cdfed Problem: indentation issues with PR #3226
Solution: fix them
2018-08-19 18:12:28 +01:00
answeroo
7852a6ce98 PGM receiver crash fix (#3226)
Problem: PGM receiver can crash due to race

Solution: do not run in_event until restart_input finishes correctly.

Signed-off-by: answeroo <jiming@yafco.com>
2018-08-19 18:10:51 +01:00
Simon Giesecke
8328208e60 Problem: inconsistent _out_pipes when using the same routing id without ZMQ_ROUTER_HANDOVER
Solution: added test case, do not erase existing without ZMQ_ROUTER_HANDOVER
2018-08-17 12:50:59 +02:00
Simon Giesecke
6d7aeb056f Problem: complexity of start_connecting
Solution: extract functions for each protocol
2018-08-15 14:46:21 +02:00
Simon Giesecke
2cd34da1b0 Problem: code duplication in session_base_t::start_connecting
Solution: extract common code
2018-08-15 14:46:21 +02:00
Simon Giesecke
799fae44fe Problem: magic literal used for inproc
Solution: define and use named constant
2018-08-15 14:46:21 +02:00
Simon Giesecke
daadb65a46 Problem: inconsistency of using terms address and uri
Solution: use terms more consistently
2018-08-15 14:46:21 +02:00
Simon Giesecke
cdc6c66f9b Problem: complexity of term_endpoint
Solution: extract resolve_tcp_addr function
2018-08-15 14:46:21 +02:00
Simon Giesecke
a2d736c14f Problem: functionality around inprocs_t is scattered
Solution: extract into functions of new inprocs_t class
2018-08-15 14:46:21 +02:00
Simon Giesecke
fb576d2f95 Problem: unnecessary procedural code
Solution: replace by functional expression
2018-08-15 14:46:21 +02:00
Simon Giesecke
3455be144d Problem: code duplication around sending of routing id
Solution: extract functionality into send_routing_id
2018-08-15 14:46:21 +02:00
Simon Giesecke
83f41526c9 Problem: code duplication around options_t::conflate
Solution: extract functionality into get_effective_conflate_option
2018-08-15 12:18:35 +02:00
Simon Giesecke
8820dedcb7 Problem: stream_engine_t::_as_server is not used
Solution: remove it
2018-08-15 11:53:31 +02:00
Simon Giesecke
0852099f67 Problem: unused field pipe_t::_credentials
Solution: remove it
2018-08-15 11:48:00 +02:00
Szekely Gyorgy
2cdad3d0ce Add ZMQ_ROUTER_NOTIFY draft socket option (#3213)
* Add ZMQ_ROUTER_NOTIFY draft socket option
2018-08-15 08:54:08 +01:00
Simon Giesecke
da30ff7d3d Problem: unused get_credential methods and associated fields
Solution: remove them
2018-08-13 15:22:18 +02:00
Luca Boccassi
0b1589dbba
Merge pull request #3209 from sigiesec/code-improvements
Code style improvements
2018-08-10 16:40:23 +01:00
Simon Giesecke
bbae67df89 Code style improvements 2018-08-10 15:36:31 +02:00
Simon Giesecke
b102e30419 Fixed naming for filter parameter, removed unnecessary temporary variable, fixed naming of local variable 2018-08-10 11:25:20 +02:00
Simon Giesecke
a1b6268c83 Made to_string const; converted C-style cast to reinterpret_cast 2018-08-10 11:25:09 +02:00
Luca Boccassi
6e8424ab5d
Merge pull request #3206 from sigiesec/fix-zap-memory-use-after-free
Problem: stream_engine_t instance may access its fields after it deleted itself
2018-08-09 18:17:58 +01:00
Simon Giesecke
737927e333 Fixed spelling of parameter 2018-08-09 18:27:01 +02:00
Simon Giesecke
46ed0920b2 Various code style improvements 2018-08-09 18:27:01 +02:00
Simon Giesecke
563651e0c9 Problem: stream_engine_t instance may access its fields after it deleted itself
Solution: prevent access to data if the object was deleted
2018-08-09 15:24:23 +02:00
Simon Giesecke
be81dcd4d3 Use std::min/max where possible 2018-08-09 12:53:32 +02:00
Simon Giesecke
3cb77e423e Use revision_pos constant 2018-08-09 12:47:18 +02:00
Simon Giesecke
758f903db4 Some code style improvements: removed redundant parentheses, added const, joined declaration and assignment of local variables 2018-08-09 12:41:08 +02:00
Simon Giesecke
89e5313114 Refactored zmq::stream_engine_t::handshake, extracted several sub-methods 2018-08-09 12:41:08 +02:00
Simon Giesecke
c3739ff604 Use static_cast instead of C-style casts, make local variables const where possible, use switch instead of chained if/else, extract rm_helper_multiple_subnodes from rm_helper to reduce nesting 2018-08-09 12:41:08 +02:00
Simon Giesecke
9e2cf35b66 Reduced number of calls to container end method 2018-08-09 12:41:08 +02:00
Simon Giesecke
19a70ab682 Optimized and simplified zmq::timers_t::execute and zmq::timers_t::timeout 2018-08-07 16:54:35 +02:00
Simon Giesecke
4f77cfa327 Removed unreachable code paths 2018-08-07 16:11:52 +02:00
Simon Giesecke
198c01e00b Use more structured for loop instead of while loop 2018-08-07 15:58:15 +02:00
Simon Giesecke
e4b4372c41 Simplified code 2018-08-07 14:15:35 +02:00
Simon Giesecke
ad3d1e7762 Reduced code duplication between xread and xhas_in 2018-08-07 14:15:35 +02:00
Simon Giesecke
3cca90ea44 Optimized zmq::dish_t::xhas_in 2018-08-07 14:15:35 +02:00
Simon Giesecke
aa1f5739b7 Optimized zmq::dish_t::xrecv 2018-08-07 14:15:35 +02:00
Simon Giesecke
fa976f87f9 Simplified uses of erase 2018-08-07 14:15:35 +02:00
Simon Giesecke
6357890ff6 Removed code duplication in process_commands 2018-08-07 10:17:12 +02:00
Luca Boccassi
3159161cef Problem: zmq_timers_* are ready for STABLE
Solution: move them from DRAFT state to STABLE
2018-07-27 23:07:56 +01:00
Michael Vilim
8a16fef3cc Problem: ZMQ_CONNECT_ROUTING_ID can be assigned to incoming socket connection (Issue #3191)
Solution: Add an identifier parameter for local attach to zmq::socket_base_t::attach_pipe
2018-07-26 18:26:35 -05:00
Alessio M
9066e0670f Problem: stack overflow on win64 #2876. Basically zmq::signaler_t::wait suffers from stack bloating the same way socket_poller was found to be bloated due to the large size of fd_set
Solution: replace the fd_set in the routine with an instance of optimized_fd_set_t
2018-06-28 14:11:32 +01:00
Luca Boccassi
b0d9a5a2d5
Merge pull request #3174 from ilue/master
Fix for issue #3162
2018-06-26 08:09:05 +01:00
Luca Boccassi
d70714e877 Problem: can't process ZMTP 3.1 cancel/subscribe commands
Solution: add some msg helpers to parse commands, and check for
subscribe or cancel commands and process them accordingly in the xpub
and xsub classes.
2018-06-23 17:16:10 +01:00
Luca Boccassi
8da4e9b95c Problem: pgm_sender does not initialise all its class variables
Solution: do it to silence static analysis warnings
2018-06-22 22:49:58 +01:00
ehilscher
0867c38032 Problem: connecter classes do not handle ZMQ_RECONNECT_IVL of -1 (#3163)
* Problem: connecter classes do not handle ZMQ_RECONNECT_IVL of -1

Solution: Add guards to prevent a reconnect timer from starting if ZMQ_RECONNECT_IVL is -1
(Issue 3158)
2018-06-12 23:23:39 +01:00
ilue
e22cd678b6
Fix #3162 2018-06-12 11:10:03 +08:00
Luca Boccassi
3a1e8f0704
Merge pull request #3159 from sigiesec/remove-superfluous-mutex
Problem: epoll_t employs an unnecessary mutex
2018-06-07 14:17:20 +01:00
Simon Giesecke
75e945f162 Problem: epoll_t employs an unnecessary mutex
Solution: remove the mutex
2018-06-06 21:41:16 +02:00
KIU Shueng Chuan
5a1ea0c398 Problem: ZMQ_USE_EPOLL_CLOEXEC not renamed to new name
Solution: rename it
2018-06-04 23:17:57 +08:00
pijyoi
c76ac5474b fix computation of winsock fd_set size (#3151)
* fix computation of winsock fd_set size
2018-06-02 13:16:33 +01:00
Simon Giesecke
5ac900a984 Problem: huge size of socket_poller_t object on Windows with select polling
Solution: use resizable_optimized_fd_set_t
2018-06-01 18:43:58 +02:00
Simon Giesecke
4a651251a7 Problem: code duplication within socket_poller_t
Solution: remove duplicated code
2018-06-01 18:24:42 +02:00
Simon Giesecke
74d3d8421f Problem: huge stack allocation with select on Windows in socket_poller_t::wait
Solution: use optimized_fd_set_t
2018-06-01 18:22:49 +02:00
Simon Giesecke
3d39bb9ca9 Problem: valid_pollset_bytes not reused in socket_poller
Solution: use it
2018-06-01 18:22:49 +02:00
Simon Giesecke
a8d62d14c1 Problem: polling utilities not at a reusable location
Solution: move to separate header
2018-06-01 18:22:48 +02:00
Simon Giesecke
7c0efcb588 Problem: huge stack allocation in Windows select code
Solution: use fast_vector_t as in poll implementation
2018-06-01 18:20:10 +02:00
Simon Giesecke
2533ffed86 Problem: memcpy code fragment is duplicated
Solution: unify between Windows and non-Windows code
2018-06-01 18:19:46 +02:00
Simon Giesecke
04dedfbc2a Problem: duplicated calculation of valid bytes in select pollset
Solution: extract to function
2018-06-01 18:16:46 +02:00
Simon Giesecke
e4c3297ed8 Problem: fragile handling of possibly dynamically allocated pollfds
Solution: extract class template fast_vector_t
2018-06-01 17:08:39 +02:00
Simon Giesecke
c6e4b0abb1 Problem: zmq_poll implementation is complex
Solution: extract compute_timeout method
2018-06-01 17:08:38 +02:00
Simon Giesecke
3db3bbfbbb Problem: duplication in implementation zmq_poller_poll
Solution: remove duplication
2018-06-01 17:08:38 +02:00
Simon Giesecke
4604014c12 Problem: unused result of call to pull_msg
Solution: add TODO comment regarding handling of the result
2018-05-31 11:21:33 +02:00
Simon Giesecke
c2ba553d87 Problem: unused values stored to variable, duplicated code
Solution: remove duplicated and redundant code
2018-05-31 11:02:26 +02:00
Simon Giesecke
ee4cdf8bf0 Problem: suspicious use of memcmp result
Solution: explicitly compare result against 0
2018-05-31 11:02:26 +02:00
Simon Giesecke
a2f91c5509 Problem: unnecessary passing of non-const data
Solution: make const
2018-05-30 23:21:53 +02:00
Simon Giesecke
c641644bb2 Problem: inconsistent parameter names
Solution: harmonize
2018-05-30 23:21:52 +02:00
Simon Giesecke
9e6f1c9a3c Problem: redundant else after return
Solution: remove redundant else
2018-05-30 23:21:52 +02:00
Simon Giesecke
6fa12bd692 Problem: unused stored value warning
Solution: add LIBZMQ_UNUSED
2018-05-30 23:21:52 +02:00
Simon Giesecke
0f2979a38e Problem: assignment used as condition warning
Solution: changed condition
2018-05-30 23:21:52 +02:00
Simon Giesecke
24edc828ab Problem: redundant else after return
Solution: remove redundant else
2018-05-30 23:21:52 +02:00
Simon Giesecke
88646438d2 Problem: differing parameter names between declaration and definition
Solution: harmonize
2018-05-30 23:21:52 +02:00
Simon Giesecke
da4309da13 Problem: violation of parameter naming conventions
Solution: change to comply with naming conventions
2018-05-30 23:21:52 +02:00
Simon Giesecke
29f1f39df3 Problem: unused parameter warning
Solution: mark parameter as unused depending on platform definitions
2018-05-30 23:21:52 +02:00
Simon Giesecke
b59d7d574d Problem: typo in parameter name
Solution: correct spelling
2018-05-30 22:52:19 +02:00
Simon Giesecke
a91c7e718c Problem: warnings on violations of CERT ERR-58
Solution: declare functions noexcept
2018-05-30 22:52:19 +02:00
Simon Giesecke
93194e7c53 Problem: non-portable memset
Solution: add dummy pointer meber to union instead
2018-05-30 22:50:30 +02:00
Simon Giesecke
9c8fde09ca Problem: inconsistent control structures in address.cpp, redundant check for NULLness before delete
Solution: harmonize, remove redundant checks
2018-05-30 22:50:30 +02:00
Simon Giesecke
0179b7577a Problem: literals protocol names used at various places
Solution: introduced named constants
2018-05-30 22:50:29 +02:00
Simon Giesecke
bd76926f5b Problem: code style issues in options_t (C-style cast, suboptimal std::string::find call, redundant method is_valid)
Solution: resolved these issues
2018-05-30 13:13:31 +02:00
Simon Giesecke
a96a87f343 Problem: problematic atoi function is used (CERT ERR-34C)
Solution: use strtol instead
2018-05-30 10:35:01 +02:00
Simon Giesecke
273137741a Problem: protected data members in ip_address_t, ip_address_mask_t violates LSP
Solution: make ip_address_mask_t independent of ip_address_t, they do not share that much, remove some code duplication between ip_address_t and ip_addr_t
2018-05-30 10:28:14 +02:00
Simon Giesecke
314ac28dbd Problem: protected data member in ip_resolver_t
Solution: declare private
2018-05-30 10:03:55 +02:00
Simon Giesecke
573815da83 Problem: protected data member in encoder_base_t
Solution: encapsulate data member properly
2018-05-30 09:57:46 +02:00
Simon Giesecke
be8e7de6be Problem: temporary files in repo
Solution: remove them
2018-05-30 09:30:00 +02:00
Simon Giesecke
5a343fc27b Problem: stream_t/router_t access data member of base class
Solution: pull up functionality to base class
2018-05-29 15:05:27 +02:00
Simon Giesecke
ab3895a470 Problem: duplicated code in stream_t & router_t
Solution: pulled up to routing_socket_base_t
2018-05-29 15:05:27 +02:00
Simon Giesecke
09fab930b3 Problem: xwrite_activated duplicated between stream_t and router_t
Solution: pull up into routing_socket_base_t
2018-05-29 15:05:27 +02:00
Simon Giesecke
c9d6ef3035 Problem: Member outpipes is duplicate between router_t and stream_t
Solution: extract into common base class routing_socket_base_t, for now as protected
2018-05-29 15:05:26 +02:00
Simon Giesecke
728eddfcfd Problem: socket_base_t::connect_routing_id is protected and only used in router_t and stream_t
Solution: add an intermediary base class routing_socket_base_t, move common functionality there and make connect_routing_id private
2018-05-29 15:05:26 +02:00
Simon Giesecke
25461a78dd Problem: members of mechanmism_t are needlessly protected
Solution: make them private
2018-05-29 11:08:22 +02:00
Simon Giesecke
47dcd84f21 Problem: C-style casts
Solution: replace by reinterpret_casts or avoid entirely
2018-05-28 18:47:07 +02:00
Simon Giesecke
917a4a8e10 Problem: reinterpret_casts between unsigned char* and char*
Solution: use char* from the beginning
2018-05-28 18:47:07 +02:00
Simon Giesecke
0a43c66a32 Problem: magic literals in zap_client.cpp
Solution: extracted constants
2018-05-28 18:47:07 +02:00
Simon Giesecke
7c2d1c1824 Problem: magic literals for UCHAR_MAX
Solution: use UCHAR_MAX constant instead
2018-05-28 18:46:50 +02:00
Simon Giesecke
a4c817e736 Problem: magic number "2" in socket_base.cpp
Solution: calculate from field sizes
2018-05-28 18:45:41 +02:00
Simon Giesecke
d75ec5e055 Problem: produce_* functions always return 0
Solution: change return type to void, and remove redundant result checks
2018-05-28 17:53:46 +02:00
Simon Giesecke
7f880c256f Problem: magic numbers and data duplication in plain_*.cpp
Solution: extract constants / move to plain_common.hpp
2018-05-28 17:53:46 +02:00
Simon Giesecke
8269b23e56 Problem: magic numbers and code duplication in msg.cpp
Solution: extract constants and unified cases
2018-05-28 17:53:44 +02:00
Simon Giesecke
18000a213f Problem: magic numbers in mechanism_base.cpp
Solution: extract constants
2018-05-28 17:53:44 +02:00
Simon Giesecke
abca9f6bc1 Problem: Magic numbers in plain_server.cpp
Solution: introduced constants
2018-05-28 17:53:44 +02:00
Simon Giesecke
2da6629e0f Problem: Magic numbers "1" and "100" in signaler.cpp
Solution: introduced constants, use std::min/std::max instead of control structures
2018-05-28 17:53:43 +02:00
Simon Giesecke
a6060674b4 Problem: Magic numbers "32" and "128" in tcp_address.cpp
Solution: introduced constants
2018-05-28 17:53:43 +02:00
Simon Giesecke
93e75fd695 Problem: Magic numbers "6" and "7" in null_mechanism.cpp
Solution: introduced constants
2018-05-28 17:53:42 +02:00
Simon Giesecke
c05db7f025 Problem: Magic numbers "1" and "6" in null_mechanism.cpp
Solution: introduced constants
2018-05-28 17:53:42 +02:00
Simon Giesecke
ff27dd01f0 Problem: Magic numbers "1" and "4" in mechanism.cpp
Solution: introduced constants
2018-05-28 17:53:42 +02:00
Simon Giesecke
7c9d058cdb Problem: Magic number "2" in ip_resolver.cpp
Solution: introduced constant
2018-05-28 17:53:41 +02:00
Simon Giesecke
16bb62e6f7 Problem: ctx_t::_slots is a plain array
Solution: use a std::vector instead
2018-05-28 17:53:41 +02:00
Simon Giesecke
a0a60e80ca Problem: Magic number "2" in ctx.cpp
Solution: introduced constant
2018-05-28 17:53:40 +02:00
Luca Boccassi
624c142365 Problem: static analysis warning about ifdef typo
Solution: fix it
2018-05-28 12:32:23 +01:00
Simon Giesecke
d767909b50 Problem: old C-style casts used
Solution: replace by static_cast/reinterpret_cast
2018-05-27 13:24:07 +02:00
Simon Giesecke
e3c73d9881 Problem: inconsistent naming style for private data members, conflicts with naming of local variables and member functions
Solution: apply and check _lower_case naming style for private data members
2018-05-27 13:24:07 +02:00
Simon Giesecke
06cfd0d8ad Problem: unclear why QueryPerformanceFrequency is called for every call of QueryPerformanceCounter
Solution: add a comment
2018-05-27 13:24:07 +02:00
Simon Giesecke
97ba02bc2f Problem: redundant empty dtor
Solution: removed
2018-05-27 13:24:06 +02:00
Simon Giesecke
6ef67f13e3 Problem: use of C-style casts and magic literals
Solution: replace by static_cast, and introduce appropriate constants
2018-05-27 13:24:06 +02:00
Simon Giesecke
37344d0b7c Problem: redundant old-style void argument declarations
Solution: remove
2018-05-26 09:34:45 +02:00
Simon Giesecke
12a97bb769 Problem: redundant else after return
Solution: remove else
2018-05-26 09:34:45 +02:00
Simon Giesecke
21498700ef Problem: integer literals assigned to bool variables
Solution: replace by bool literals
2018-05-26 09:34:45 +02:00
Simon Giesecke
eacc805646 Problem: complex unnecessary ternary expressions
Solution: simplify to comparison against 0
2018-05-26 09:34:44 +02:00
Simon Giesecke
1432011277 Problem: inconsistent local variable naming
Solution: configured clang-tidy check and applied fixes
2018-05-26 09:34:44 +02:00
Simon Giesecke
c581f43c97 Problem: parameter naming style inconsistent
Solution: define and apply parameter naming style: lower_case_
2018-05-26 09:34:44 +02:00
Simon Giesecke
763760988f Problem: VS2008 has no definition of UINT16_MAX
Solution: provide definition based on _UI16_MAX
2018-05-25 15:13:07 +02:00
Simon Giesecke
d90e70c1cf Problem: maximum allowed value for ZMQ_HEARTBEAT_TTL is wrong
Solution: use UINT16_MAX
2018-05-25 15:06:11 +02:00
Simon Giesecke
2ae0c4e2c5 Problem: unnecessarily complex inheritance hierarchy in decoders, warning C4355 with VS2010
Solution: make allocator a member of decoder_base_t
2018-05-24 15:17:08 +02:00
Simon Giesecke
082b6aa641 Problem: epoll not supported under Windows
Solution: Use wepoll on Windows
2018-05-23 16:25:07 +02:00
Luca Boccassi
3730833f9d
Merge pull request #3125 from sigiesec/improve-socket-inheritance
Improve socket inheritance handling
2018-05-23 13:50:39 +01:00
Simon Giesecke
2d9a8955f5 Problem: race condition in making socket non-inheritable
Solution: create sockets with WSA_FLAG_NO_HANDLE_INHERIT
2018-05-23 11:23:33 +02:00
Simon Giesecke
44da0e7e42 Problem: code duplication in making sockets non-inheritable
Solution: extracted make_socket_noninheritable function
2018-05-23 11:23:33 +02:00
Simon Giesecke
c432aada84 Problem: inconsistent error handling and unnecessary code duplication
Solution: make error handling consistent and use retired_fd to remove code duplication
2018-05-23 11:23:33 +02:00
Luca Boccassi
44b0753c5c
Merge pull request #3047 from acsearle/master
Allow EBADF on iOS #3046
2018-05-23 09:56:32 +01:00
Luca Boccassi
d02ba13576
Merge pull request #3122 from sigiesec/test-migrations
Migrated some more tests to unity and fixed some more code style issues
2018-05-22 20:37:34 +01:00
Simon Giesecke
440be28d7e Problem: unnecessary non-const variables
Solution: add const
2018-05-22 18:46:40 +02:00
Simon Giesecke
d6952ded71 Problem: unused include directives and redundant forward declarations
Solution: removed
2018-05-22 18:46:40 +02:00
Simon Giesecke
04ec6aaf28 Problem: malloc call may fail
Solution: add alloc_assert
2018-05-22 18:46:40 +02:00
Simon Giesecke
d326434b37 Problem: API poller cannot be set independently from I/O thread poller, poll I/O thread poller broken on Windows
Solution: change platform definitions to separate API poller from I/O thread poller, disallow configuring poll I/O thread poller on Windows
2018-05-22 18:36:04 +02:00
Simon Giesecke
4e616f30dd Problem: C-style casts used
Solution: replace by C++-style casts
2018-05-18 17:04:01 +02:00
Simon Giesecke
d002eb5578 Problem: analyzer does not know that zmq_abort does not return
Solution: add no-return attributes
2018-05-18 16:25:24 +02:00
Simon Giesecke
7b3acd47b2 Problem: malloc may fail in blob_t ctors
Solution: add alloc_assert calls
2018-05-18 16:25:24 +02:00
Simon Giesecke
9da0c6d62f Problem: goto jumping backwards
Solution: replace by for loop
2018-05-18 14:34:43 +02:00
Simon Giesecke
62e48f837d Problem: assignment within complex condition
Solution: restructured code, inverted condition
2018-05-18 14:34:43 +02:00
Simon Giesecke
fcee4ccdfd Problem: type of retired_fd is not fd_t (but int)
Solution: properly declared underlying type of enum declaring retired_fd
2018-05-18 14:34:43 +02:00
Simon Giesecke
f103f62630 Problem: unreachable return statement
Solution: fix #if/#else structure
2018-05-18 14:34:42 +02:00
Simon Giesecke
290d215324 Problem: stream_engine assumes options_t.type is a single byte, but its type is int
Solution: change options_t.type to int8_t
2018-05-18 14:34:42 +02:00
Simon Giesecke
e19823d83a Problem: redundant else
Solution: remove redundant else
2018-05-17 15:17:55 +02:00
Simon Giesecke
ad781319ef Problem: ternary operator used with boolean literals\n\nSolution: Use comparison with 0 instead 2018-05-17 15:17:55 +02:00
Simon Giesecke
22b72bb678 Problem: deallocate calls release after de-allocation
Solution: reduce to newly extracted function clear, which does not use the freed pointer
2018-05-17 15:05:41 +02:00
Simon Giesecke
e37fc47fb6 Problem: return value is stored but never used
Solution: add code to make non-use explicit
2018-05-17 15:05:41 +02:00
Simon Giesecke
2120f6aced Problem: ypipe_t::read is called with NULL argument
Solution: call check_read instead
2018-05-17 15:05:41 +02:00
Simon Giesecke
440d428153 Problem: single-argument ctor of blob_t is not marked explicit
Solution: add explicit
2018-05-17 13:29:27 +02:00
Antony Searle
fa027970bb Allow EBADF on iOS #3046 2018-05-16 14:59:44 +10:00
Luca Boccassi
cbd52feb48
Merge pull request #3112 from devindusoft/FixCompilation_ZMQ_ATOMIC_PTR_MUTEX
Fixed compilation with ZMQ_ATOMIC_PTR_MUTEX
2018-05-15 15:10:49 +01:00
Simon Giesecke
e78d20ff2c Problem: test_radio_dish_udp_ipv6 triggers assertion under Windows
Solution: fix handling of sockaddr in recvfrom
2018-05-15 14:53:40 +02:00
korbes
63e1e745f8 Fixed compilation with ZMQ_ATOMIC_PTR_MUTEX 2018-05-14 22:08:15 -03:00
Luca Boccassi
d81a041f18
Merge pull request #3103 from sigiesec/win-warnings-as-errors
Warnings in Windows builds
2018-05-14 22:53:04 +01:00
Simon Giesecke
d437d668c0 Problem: MSVC warnings in connection with poll
Solution: handle types properly
2018-05-14 22:25:21 +02:00
Simon Giesecke
c589f2b603 Problem: C4800 warning in socket_base.cpp
Solution: make proper boolean expression
2018-05-14 19:18:37 +02:00
Simon Giesecke
c52871f82c Problem: C4627 warning in proxy.cpp and signaler.cpp
Solution: move conditional include directive to precompiled.hpp
2018-05-14 18:07:13 +02:00
Simon Giesecke
a8095a1046 Problem: C4800 warning in ip_resolver.cpp
Solution: fix type specification
2018-05-14 18:07:13 +02:00
Simon Giesecke
95c770a275 Problem: C4099 warning in udp_engine.cpp
Solution: fix type specification
2018-05-14 17:17:11 +02:00
Simon Giesecke
bf6bde3ae3 Problem: unnecessary ifdefs regarding handling of int vs. SOCKET at various places
Solution: use a typedef instead
2018-05-14 14:58:36 +02:00
Simon Giesecke
e8877f78a9 Problem: zmq_poller_[add/modify] accept invalid events arguments silently
Solution: check and return an error on invalid arguments. Fixes #3088
2018-05-14 14:58:36 +02:00
Simon Giesecke
6b9b369469 Problem: zmq_poller_* argument check code is cloned
Solution: extract common code into functions
2018-05-14 14:34:46 +02:00
Simon Giesecke
213254cca5 Problem: inconsistent behaviour of zmq_poller_new in case of memory exhaustion
Solution: return NULL and set errno to ENOMEM
2018-05-14 11:29:24 +02:00
Simon Giesecke
00d25b7873 Problem: inconsistent behaviour of zmq_poller_add and zmq_poller_add_fd in case of memory exhaustion
Solution: always return -1 with errno == ENOMEM
2018-05-14 11:29:24 +02:00
Luca Boccassi
b331caad06 Problem: ZMTP 3.1 PING Context not implemented
Solution: if a PING message contains a context, echo it back in the
PONG message. In order to do so, create the PONG message when PING
is received and store it in the engine.
After the PING the engine goes straight to encoding and sending, so
there can always be at most one pending PING.
Add tests for various contexts.
2018-05-14 10:14:13 +02:00
Luca Boccassi
5482b1ca45 Problem: heartbeat command parsing does not check command name size
Solution: treat the first byte of the command body as the size of the
command name, rather than as an id, to comply with ZMTP 3.1.
This was not an actual problem at runtime since both heartbeat
commands have a size of 4, which was treated like an id.
But once SUBSCRIBE/UNSUBSCRIBE get implemented it needs to be checked.
2018-05-14 09:15:39 +02:00
Luca Boccassi
09f700f72e Problem: uninitialised class variable warning
Solution: initialise it
2018-05-13 18:24:50 +01:00
Luca Boccassi
7ba074fa28 Problem: Sun Studio build errors
Solution: add compiler flags to support extensions like anonymous
structs in unions, fix casting of const, and check for suncc rather
than solaris
2018-05-13 18:24:50 +01:00
Lionel Flandrin
a833ace204 Problem: no way to specify source interface for UDP multicast sender sockets
Solution: if a binding interface is provided in the sender URL we pass
it to IP[V6]_MULTICAST_IF setsockopt
2018-05-13 18:32:12 +02:00
Luca Boccassi
b78cfb2395 Problem: mismatching declarations and definitions break Solaris Studio build
Solution: add missing const qualifier to internal functions
2018-05-13 13:17:20 +01:00
Luca Boccassi
8b82ed50a2 Problem: Solaris Studio does not convert from char * to string
Solution: do it explicitly to fix build on Solaris 10/11 with the Sun
compiler
2018-05-13 13:16:37 +01:00
Simon Giesecke
3d9c119543 Problem: compilation broken on Solaris
Solution: remove constness on pair arguments. Fixes #3090
2018-05-13 13:15:32 +01:00
Simon Giesecke
d6433b5c24 Problem: warnings in MSVC builds around size_t/int
Solution: use proper types
2018-05-13 11:11:19 +02:00
Lionel Flandrin
99412c810d Problem: ZMQ doesn't expose the MULTICAST_LOOP socket option
Solution: add a new ZMQ_MULTICAST_LOOP option for UDP sockets.
2018-05-10 19:24:46 +02:00
Lionel Flandrin
b0df4be51c Problem: UDP engine does not support IPv6
Solution: Add IPv6 support
2018-05-09 12:06:23 +02:00
Lionel Flandrin
746d4a0f5e Problem: UDP transport doesn't let the user specify the local bind address
for multicast

Solution: augment the UDP URL syntax to accept an interface specifier with a
syntax similar to the PGM urls.

Fixes #2212
2018-05-04 14:36:18 +02:00
Lionel Flandrin
524affc4c3 Problem: UDP address parser uses ad hoc code to detect multicast address
Solution: factor the code into ip_resolver, add IPv6 support and unit tests.
2018-05-04 10:44:01 +02:00
Lionel Flandrin
2dc8579412 Problem: the UDP address code uses an ad hoc custom parser
Solution: replace it with the ip_resolver code shared with the TCP
address code

It simplifies the UDP parsing code and makes it behave more like the
TCP counterpart, in particular it's not possible to connect to hosts
by name and bind by NIC names.

It also adds support for "*" port resolving to 0 (useful to let the OS
allocate the port number).
2018-05-03 14:22:48 +02:00
Lionel Flandrin
406c348771 Problem: ip_resolver allows wildcard ports for non-bindable sockets
Solution: return an error in this situation but still allow using an explicit
"0" if somebody really wants to connect to port 0.

This shouldn't break any existing code because a "*" port was already rejected
in an early test in the TCP path in zmq::socket_base_t::connect.
2018-05-03 13:19:22 +02:00
Lionel Flandrin
4cd2c2ebf8 Problem: address parsing code is tied to the TCP code
Solution: Factor the code into a different file with a well defined API and add
unit tests.
2018-05-02 18:06:01 +02:00
Luca Boccassi
cae6434345 Problem: HEARTBEAT command breaks REQ connection
Solution: ignore command messages in the REQ session to avoid
disrupting the state machine.
Commands are handled by the engine before handing off to the session.
2018-04-28 15:25:24 +01:00
Maks Naumov
989dfc7801
Fix fd_t variable casting on Windows platform
event_accepted() already accepts fd_t type and there is no reason to cast it to int type
Moreover, on Windows x64 this leads to truncation memsize -> int
2018-04-19 12:38:06 +03:00
asafkahlon
8e8009ec5d Implement the wsa_error_no function with switch-case (#3044)
* Implement the wsa_error_no function with switch-case

Signed-off-by: Asaf Kahlon <asafka7@gmail.com>
2018-04-13 15:16:54 +01:00
Marc Sune
c7d602a29b Problem: C++ style comments in header file breaks pedantic build
Solution: change missing comments in header file
Fixes: #3036 and adds on top of '15905c5'
2018-04-03 22:58:36 +02:00
Luca Boccassi
15905c5561 Problem: C++ style comments in C file breaks pedantic build
Solution: change comments
Fixes: #3036
2018-04-02 21:52:01 +01:00
Simon Giesecke
87fbb5c447 Problem: socket poller shutdown asserts when context is terminating
Solution: do not call getsockopt to query thread-safety of a socket
2018-03-28 11:23:08 +02:00
Luca Boccassi
6f26a33359 Problem: 4.2.5 is out, we need to restore API changes and 4.3.x
Solution: revert the revert!

Revert "Problem: regression in 4.2.3 went unnoticed, want to release 4.2.5"

This reverts commit 5f17e26fa4.
2018-03-23 19:31:42 +00:00
Luca Boccassi
5f17e26fa4 Problem: regression in 4.2.3 went unnoticed, want to release 4.2.5
Solution: revert DRAFT -> STABLE API transition so that we can do a
bugfix-only 4.2.5 release.
Will be re-reverted once tagged.

Revert "Problem: ZMQ_BINDTODEVICE has met STABLE conditions"

This reverts commit 3cb79f5042.

Revert "Problem: ZMQ_MSG_GSSAPI_* have met STABLE conditions"

This reverts commit 374da4207b.

Revert "Problem: ZMQ_MSG_T_SIZE has met STABLE conditions"

This reverts commit 6411c4a247.

Revert "Problem: docs say STABLE API still in DRAFT"

This reverts commit 9f2f30b7ff.
2018-03-23 11:22:10 +00:00
Luca Boccassi
1c5a63e939 Problem: backward incompatible change to NULL with ZAP
Solution: like for other mechanism, do not enforce strict ZAP protocol
adherence unless the specific socket option is enabled with NULL auth.

Add test to exercise this functionality, and fix ZAP test to set the
socket option when it uses NULL auth.

See: https://github.com/zeromq/pyzmq/pull/1152
2018-03-22 19:27:23 +00:00
Luca Boccassi
3cb79f5042 Problem: ZMQ_BINDTODEVICE has met STABLE conditions
Solution: move them from DRAFT to STABLE since it's been in a public
release, committed for 6+ months and has not changed.
2018-03-21 16:45:41 +00:00
Luca Boccassi
374da4207b Problem: ZMQ_MSG_GSSAPI_* have met STABLE conditions
Solution: move them from DRAFT to STABLE since it's been in a public
release, committed for 6+ months and has not changed.
2018-03-21 16:45:41 +00:00
Luca Boccassi
6411c4a247 Problem: ZMQ_MSG_T_SIZE has met STABLE conditions
Solution: move it from DRAFT to STABLE since it's been in a public
release, committed for 6+ months and has not changed.
Given a new STABLE symbol has been added, bump minor version number.
2018-03-21 16:45:41 +00:00
Pontus Sköldström
6a5af3dae6 Removed unnecessary errno_assert 2018-03-20 14:35:24 +01:00
Pontus Sköldström
65a9670065 Problem: ZMQ_DISH over UDP triggers errno_assert() after hitting watermark 2018-03-19 17:46:48 +01:00
Luca Boccassi
8f5fc705e4 Problem: global random init/deinit breaks existing applications
Solution: restrict it only to the original issue #2632, Tweetnacl on
*NIX when using /dev/urandom, ie: without the new Linux getrandom()
syscall.

Existing applications might use atexit to register cleanup functions
(like CZMQ does), and the current change as-is imposes an ordering
that did not exist before - the context MUST be created BEFORE
registering the cleanup with atexit. This is a backward incompatible
change that is reported to cause aborts in some applications.

Although libsodium's documentation says that its initialisation APIs
is not thread-safe, nobody has ever reported an issue with it, so
avoiding the global init/deinit in the libsodium case is the less
risky option we have.

Tweetnacl users on Windows and on Linux with getrandom (glibc 2.25 and
Linux kernel 3.17) are not affected by the original issue.

Fixes #2991
2018-03-19 15:47:07 +00:00
Pontus Sköldström
dd5eec35be Support application metadata through ZMQ_METADATA
Lets the application set per-connection metadata.
Metadata is specified as "X-key:value" and set using zmq_setsockopt, eg:
zmq_setsockopt (s, ZMQ_METADATA, "X-key:value", 11);

The peer can then obtain the metadata from a received message:
char *data = zmq_msg_gets(msg, "X-key");
2018-03-14 12:56:15 +01:00
Sergey Kachanovskiy
9c748f1bf1 Partial fix for issue 2963, removed invalid casts from fd_t to int (#2984)
* Fixes issue 2963, ref stream_engine.cpp:981

* Fixes issue 2963, ref socks_connecter.cpp:158

* Fixes issue 2963, ref tcp_listener.cpp:144

* Fixes issue 2963, ref tcp_connecter.cpp:423

* Fixes issue 2963, ref socks_connecter.cpp:436

* Fixes issue 2963, ref tcp_listener.cpp:179

* Fixes issue 2963, ref tcp_listener.cpp:268

* Fixes issue 2963, ref tcp_connecter.cpp:160
2018-03-12 11:55:58 +01:00
Luca Boccassi
8d544ef1c4 Problem: formatting issues in the CI
Solution: commit clang-format-diff
2018-03-10 12:44:27 +00:00
Luca Boccassi
fef99d6c50 Problem: tweetnacl is external code and clang-format parses it
Solution: add pragma to make clang-format ignore the external code
2018-03-10 12:43:34 +00:00
Manuel Segura
4726f7262d Pull request to merge porting to WindRiver VxWorks 6.x (#2966)
* Problem: Still need to port over more files to VxWorks 6.x

Solution: Port more files to VxWorks 6.x

* Problem: Need to port over remaining files to VxWorks 6.x. Also remove POSIX thread dependency for VxWorks (because of priority inversion problem in POSIX mutexes with VxWorks 6.x processes)

Solution: Port over remaining files to VxWorks 6.x. Also removed POSIX thread dependency for VxWorks

* Problem: Needed to modify TCP, UDP, TIPC classes with #ifdefs to be compatible with VxWorks 6.x.

Solution:  Modify TCP, UDP, TIPC classes with #ifdefs to be compatible with VxWorks 6.x
2018-03-10 11:03:02 +00:00
Kachanovskiy
90342e0d29 Fixed issue #2979 2018-03-09 22:24:23 +01:00
Pontus.Skoeldstroem
7abb8388d6 Problem: Tests for different TIPC address types missing (#2956)
* Tests for different TIPC address types and code cleanup

* Adds tests for binding/connecting with different TIPC address types
  using Unity
* Adds error checking for address type misuse
2018-03-07 17:31:26 +00:00
Simon Giesecke
cef9cfa091
Revert "Problem: mis-detection of threadsafe_static_init causes test failures" 2018-03-07 15:03:07 +01:00
Luca Boccassi
9bd2d3f937 Problem: mis-detection of threadsafe_static_init causes test failures
Solution: do not rely __cplusplus >= 201103L to detect whether the
compiler supports thread safe static initialisation, but check only
the proper feature preprocessor macro.
GCC introduced it in version 8, and Clang in version 6.
2018-03-06 23:11:03 +00:00
Luca Boccassi
e0b1992dd7 Problem: build broken with gcc-4.7
Solution: initialise variable in options.cpp to dummy value to fix
compiler complaint:

 src/options.cpp: In function
  'int zmq::do_setsockopt_int_as_bool_strict(const void*, size_t, bool*)':
 src/options.cpp:121:5: error: 'value' may be used uninitialized in
  this function [-Werror=maybe-uninitialized]
 src/options.cpp: In function
  'int zmq::do_setsockopt_int_as_bool_relaxed(const void*, size_t, bool*)':
 src/options.cpp:135:31: error: 'value' may be used uninitialized in
  this function [-Werror=maybe-uninitialized]
2018-03-06 20:29:47 +00:00
Luca Boccassi
ec58ba04f3
Merge pull request #2972 from sigiesec/reduce-sockopt-code-duplication
Problem: code duplication in getsockopt/setsockopt
2018-03-06 20:08:46 +00:00
Simon Giesecke
6f967c3a13 Problem: code duplication in getsockopt/setsockopt
Solution: extracted common code into do_getsockopt/do_setsockopt functions
2018-03-06 16:41:30 +01:00
Luca Boccassi
10d2b2885e
Merge pull request #2971 from ZMQers/fix-static-init
Problem: static initialization order fiasco
2018-03-06 09:18:52 +00:00
Luca Boccassi
541ca30d8e Problem: make clang-format still shows error in the CI
Solution: run make clang-format-diff and commit the changes.
2018-03-05 22:41:11 +00:00
Luca Boccassi
4ea1e78d9d
Merge pull request #2969 from skaes/master
Problem: enormous memory increase due to zero copy decoding
2018-03-05 17:40:33 +00:00
Stefan Kaes
fcbd2a5710 Problem: enormous memory increase due to zero copy decoding
The zero copy decoding strategy implemented for 4.2.0 can lead to a large
increase of main memory usage in some cases (I have seen one program go up to
40G from 10G after upgrading from 4.1.4). This commit adds a new option to
contexts, called ZMQ_ZERO_COPY_RECV, which allows one to switch to the old
decoding strategy.
2018-03-05 18:13:28 +01:00
Ryan Hileman
3658b2b580 Problem: pthread condvar timeouts are broken (#2967)
* fix pthread condvar timeouts

This fixes a race condition / hang for threadsafe sockets.
Context: https://github.com/zeromq/czmq/issues/1873#issuecomment-370279244
2018-03-05 16:36:10 +00:00
Simon Giesecke
8cdfc8b9dd Problem: static initialization order fiasco
Solution: use local statics when available in a thread-safe implementation
2018-03-05 16:30:57 +01:00
Simon Giesecke
9cd01bb54f Problem: inconsistent return values from mtrie_t::rm
Solution: Return an enum from rm instead of a bool, and adapt existing uses
2018-03-02 13:42:50 +01:00
Simon Giesecke
36cdcc6c1a Problem: docs of mtrie referring to subscriptions and pipes
Solution: generalized terms to entries/values
2018-03-02 13:42:47 +01:00
Simon Giesecke
5d5def40b5 Problem: casts required due to void* arguments in a C++ class
Solution: introduce a type template argument
2018-03-02 13:42:42 +01:00
Simon Giesecke
5fb0e97ab7 Problem: semantic issues
Solution: added some TODO comments, improved existing documentation
2018-03-02 13:42:31 +01:00
Simon Giesecke
a9712c0bf2 Problem: no unittests for mtrie
Solution: made mtrie generic (to remove complex dependency on pipe_t),
and added some unit tests
2018-03-02 13:32:51 +01:00
Simon Giesecke
9fc3692e3f Problem: read-only arguments of mtrie are not declared as const
Solution: add const, introduce typedef
2018-03-02 13:32:50 +01:00
Romain Geissler
1e03f7b2d4 Fix gcc 8 build warning/error with -O3. 2018-02-27 10:12:22 +01:00
Pontus Sköldström
78aa9b1983 Support addressing TIPC Port Identity
ZeroMQ currently supports location independent addressing using TIPC
Port Names with tipc://{type,instance}. This commits adds support for
connecting and binding using TIPC Port Identity addresses. To connect
using Port Identities the expected format is tipc://<Z.C.N:Ref>, e.g.
"tipc://<1.2.3:123123>". To bind using TIPC Port Identities the expected
format is "tipc://<*>".
2018-02-19 17:34:40 +01:00
Kachanovskiy
e10464e45e Fix for build break when SIO_LOOPBACK_FAST_PATH is not defined (i.e. in VS2010) 2018-02-13 23:04:08 +01:00
Simon Giesecke
94743fd21f Problem: wrong formatting in several files
Solution: apply clang-format
2018-02-13 18:40:43 +01:00
Simon Giesecke
90c6d993be Problem: kqueue_t fails unittest_poller
Solution: fix shutdown of kqueue_t
2018-02-13 18:38:30 +01:00
Simon Giesecke
3b90ad8c63 Problem: support of std::atomic is incomplete in VS <2015
Solution: use std::atomic only from VS 2015
2018-02-13 18:38:29 +01:00
Simon Giesecke
96131b5b4e Problem: no documentation of the poller concept
Solution: added documentation
2018-02-13 18:38:25 +01:00
Simon Giesecke
a8e9032dc5 Problem: unreachable code in io_thread_t::process_stop
Solution: replaced by assertion
2018-02-13 18:38:24 +01:00
Simon Giesecke
a5738529e8 Problem: wsa_assert does not include error code
Solution: extend output of wsa_assert
2018-02-13 18:38:22 +01:00
Simon Giesecke
e8e24030ea Problem: network initialization and shutdown functions not available for
reuse

Solution: extract into functions defined in ip.hpp

Problem: signaler_t::make_fdpair not reusable

Solution: move make_fdpair to ip.hpp

Problem: epoll worker with no fds cannot be stopped

Solution: use interruptible epoll_pwait call

Problem: insufficient unit tests for poller

Solution: add test cases
2018-02-13 18:38:17 +01:00
Simon Giesecke
c62574ffca Problem: segfault in select_t::trigger_events
Solution: fixed access to stale vector
2018-02-12 14:42:46 +01:00
Simon Giesecke
11a5388637 Problem: data race w.r.t. select_t::stopping
Solution: change termination condition of select_t
2018-02-12 14:42:33 +01:00
Simon Giesecke
e650240580 Problem: data race w.r.t. poll_t::stopping
Solution: remove stopping, stop on thread-safe conditions; add
additional checks for correct thread-safe usage
2018-02-12 14:41:53 +01:00
Simon Giesecke
08201bc1b9 Problem: select blocks forever under Unix
Solution: fixed call of select, and initialization of poll_t members
2018-02-12 14:39:02 +01:00
Luca Boccassi
a30133d8f5
Merge pull request #2935 from ZMQers/unity-base
Problem: no test framework, no unit tests
2018-02-12 11:01:08 +00:00
Luca Boccassi
d0e01b4bb2 Problem: regression with "select" on *nix (#2940)
* Problem: build failure with select as polling mechanism

Solution: cast mailbox_handle argument to (poller_t::handle_t) like in
the reaper thread class.

* Problem: build failure due to INT_MAX use without include

Solution: include limits and climits in src/select.cpp where INT_MAX is
used

* Problem: build failure due to unused variable in select.cpp

Solution: move the declaration of int rc inside the ifdef block where
it is actually used

* Problem: reference to wrong variable in select.cpp breaks build

Solution: fix it

* Problem: family_entry_t constructor has no body, build fails on *nix

Solution: add empty inline function in the struct

* Problem: no test coverage for poll and select

Solution: add Travis jobs for them on Linux

* Problem: Travis jobs cannot run in container infra

Solution: set sudo: false as it is not required anymore
2018-02-12 03:01:03 -05:00
Simon Giesecke
7ea924c763 Problem: segfault on thread_t::stop if thread was never started
Solution: add started flag
2018-02-11 17:25:36 +00:00
Simon Giesecke
f87d3ab294 Problem: pollers unnecessarily depend on whole ctx_t, but actually use only start_thread method
Solution: extract thread_ctx_t from ctx_t
2018-02-11 17:25:36 +00:00
Simon Giesecke
5873894c83 Problem: wrong assertion macro used on Windows
Solution: use wsa_assert instead of errno_assert
2018-02-11 13:52:41 +01:00
Simon Giesecke
2f27bcd74b Problem: assertion failure in poll_t::poll if timer_event retired a
pollset entry

Solution: clean up retired entries before poll
2018-02-11 13:49:26 +01:00
Simon Giesecke
a2af3d18cc Problem: unittest_poller fails for poll_t
Solution: fixed behaviour in corner cases
2018-02-11 13:49:25 +01:00
Luca Boccassi
c33cb38af2
Merge pull request #2928 from eponsko/master
Add support for ZMQ_XPUB_NODROP on ZMQ_RADIO sockets
2018-02-09 17:15:47 +00:00
Pontus Sköldström
a57f7e3824 Add support for ZMQ_XPUB_NODROP on ZMQ_RADIO sockets
Solves issue #2927
2018-02-09 16:20:50 +01:00