Added block boolean var to second process_commands() invocation for blocking sockets
instead of always using true. This prevents the process_commands() call from hanging
when a message is received with an empty queue after the call to xrecv() but
prior to the initial call to process_commands() invoked when ++ticks == inbound_poll_rate.
Signed-off-by: Marc Rossi <mrossi19@gmail.com>
For historical reasons queue to transfer commands between
threads was called 'signaler'. Given that it was used to
pass commands rather than signals it was renamed to 'mailbox',
see Erlang mailboxes.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Threads were so far identified by integers called 'slots'.
This patch renames them to more comprehensible 'tid's (thread IDs).
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
If the socketpair used by signaler_t fills up, this can lead to deadlock.
This patch provides partial resolution by attempting to resize SO_SNDBUF on
the writer side, and if that fails we shall at least assert rather than
hang.
I've also refactored the signaler_t code to make the platform-dependent
parts clearer and have tested both the MSG_DONTWAIT and standard POSIX path
in recv.
The Win32 implementation currently does not implement resizing as I'm not
convinced that it's safe, but it will also assert like other platforms if
signaler_t::send() cannot succeed.
The OpenVMS implementation has been carried forward but is untested.
Signed-off-by: Martin Lucina <mato@kotelna.sk>
devpoll_t used this constant to determine how many events to
retrieve from the poller in one go. The implementation was
changed not to depend on this constant.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
With SunStudio's implementation of STL basic_string constructor
doesn't accept NULL as a parameter even though size of string
is set to zero. Fixed.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
1. ZMQ_LINGER option can be set/get
2. options are part of own_t base class rather than being declared
separately by individual objects
3. Linger option is propagated with "term" command so that the
newest value of it is used rather than the stored old one.
4. Session sets the linger timer if needed and terminates
as soon as it expires.
5. Corresponding documentation updated.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
The comment about memory ownership in uuid_t::to_string
was misleading as on most platforms the buffer is a field
of the object;
The string allocated in UuidToString() wasn't properly freed
with RpcStringFree()
Signed-off-by: Taras Shpot <taras.shpot@eleks.com>
A minor workaround to resolve compilation error with sunstudio compiler,
which does not yet support member templates for std::multimap.
Signed-off-by: Martin Pales <m.pales@gmail.com>
zmq_msg_close now empties the message on zmq_msg_close, thus not
leaving random data in the structure, that may be mistaken for
a valid message.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Session base class now handles the engine events exclusively. It notifies
derived session types using dedicated "attached" and "detached" events.
Couple of bugs was fixed along the way.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
When a session is being closed down its inbound and outbound
pipe pointers are set to null. If (re) connection happens at
that time, session may try to reinistantiate the pipes which
is wrong. This patch allows session to attach pipes only once
in its lifetime.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
The patch was supposed to check that pipe writer sends messages
in atomic fashion. However, it prevented the user to read
half of a message and close the socket.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Since executing the timers might modify the source pollsets we have
to defer the initialisation until after the timers have executed.
Signed-off-by: Christian Gudrian <christian.gudrian@fluidon.com>
Macro ZMQ_VERSION represents the current version of 0MQ
Macro ZMQ_MAKE_VERSION(major,minor,patch) allows to create
a representation of the specified version.
The versions can be compared using simple <, >, ==, etc.
operators.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Fix in termination of session attached to a REP socket.
Several fixes of session termination in case of disconnection.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Add signaler_sndbuf_size option to config.hpp which allows the user to
increase the size of the send buffer used by the signalling socketpair.
Implement random backoff for reconnection attempts using a primitive
pseudo-random generation to prevent reconnection storms.
Add wait_before_connect option to config.hpp to allow the user to enable
random delay even on initial connect. Default is false for low latency.
Signed-off-by: Martin Lucina <mato@kotelna.sk>
Specifically, shutdown of child objects is initiated *before* termination
handshake with socket object.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
* Assertion to check that pgm_getaddrinfo is actually returning something.
* Missing pgm_connect call.
* Typo on TOS causing immediate abort.
* Placeholder calls for timeouts whilst continuing spin loop functionality.
* OpenPGM v5 now supports reference counting so remove init checks.
* Duplicate UDP unicast port setting, requires one unicast and one multicast.
* Incorrectly set socket rcvbuf size with sndbuf.
* Replace std::lexicographical_compare of TSI's with long word integer comparisons.
* pgm_socket_t::receive returns -1 on no data.