I've fixed the error in zmsg and in zframe, see https://github.com/zeromq/czmq/pull/886
On Fri, Jan 9, 2015 at 10:46 AM, Pieter Hintjens <p...@imatix.com> wrote: > Can you make a minimal reproducible test case? > > On Fri, Jan 9, 2015 at 9:41 AM, <sven.koebn...@t-online.de> wrote: >> another related thing buthers me in this context: >> >> When zmsg_send() indeed returns with rc==-1 and a NULLed message (data is >> definitely lost) I have a chance to check for this lost message (simply >> asserting on rc==-1 && message==NULL). >> >> BUT (!!) what is with zmsg_recv() ? Situation: I successfully zmsg_send() a >> message and is is delivered by ZMQ to the target (still inside ZMQ). When >> the same error occurs in the applications zmsg_recv() call, will the message >> be returned in the next call to zmsg_recv() or is is lost in this case also. >> Here, I do not have any chance to work with a copy as would be possible in >> the sending example below. >> >> This question destroys the first idea of holding a copy before sending. >> Indeed, I tryed, but zmsg_dup() destroyes routing information in the >> message, so it gets lost(silently) in transport failing to be adressed. Does >> zmq_msg_copy() work "better" and also copies the rotuing info? >> >> As an info: the EINTR thingy happens in Suse Linux on 32 and 64 bit using >> ZMQ4 (in any version) while debuging with Eclipse/gdb. I happens VERY often >> when breakpoints are triggered, but also (rarely) when the application is >> just running under gdb without any suspends due to breakpoints (breakpoints >> existing, but not hit). >> >> >> >> The system when pretty well for 2 years (!!!) under ZMQ2 and I have this >> problem only in ZMQ4 ... there has never been an EINTR under ZMQ2, so my >> code had to be heavily modified with loops for "temporary failures" with >> errno== EINTR or EAGAIN. >> >> >> >> ^5 >> >> >> >> Am 2015-01-09 08:30, schrieb sven.koebn...@t-online.de: >> >> Hi * ! >> >> I recently switched from ZMQ2 (pretty old) to ZMQ 4 and since then have some >> problems in debugging with EINTR. >> >> Following code: >> >> do { >> rc = zmsg_send (&zrep, clsocket_); >> if (rc<0) { >> if (errno == EINTR || errno == >> EAGAIN) { >> logWarn("temporary failure in >> zmq send() ... will be tried again."); >> } else { >> logFatal("hard error in sending >> zmq ... manually destroying message ... it will be lost"); >> zmsg_destroy(&zrep); >> } >> if (zrep) { >> logWarn("sending of reply msg >> returned rc("<<rc<<"), zmq_errno("<<zmq_errno()<<") >> "<<zmq_strerror(zmq_errno())); >> logWarn("but message is still >> existent ... retrying"); >> } else { >> logError("sending of reply msg >> returned rc("<<rc<<"), zmq_errno("<<zmq_errno()<<") >> "<<zmq_strerror(zmq_errno())); >> logFatal("message nulled anyway >> by zmq ... seems lost ..."); >> } >> } >> } while (zrep); // repeat until message is >> gone >> >> This snippet usualy works, but sometimes I get the warning of EINTR. No >> problem, I thought, but despite returning an error (rc==-1, errno==EINTR) >> the message pointer is NULLed, so I cannot resend the message. >> >> The Logs prove, that indeed the message is NOT sent, and for resending I'd >> need a copy ... what am I doing wrong? >> >> >> >> ^5 >> >> sven >> >> >> >> _______________________________________________ >> zeromq-dev mailing list >> zeromq-dev@lists.zeromq.org >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> >> >> >> >> >> _______________________________________________ >> zeromq-dev mailing list >> zeromq-dev@lists.zeromq.org >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> _______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev