Re: [zeromq-dev] lost message due to EINTR

2015-01-27 Thread sven . koebnick
Hi *! I found the bug that I thought to be caused by EINTR: The EINTR-thingy was gone, when I fixed some illegal refference usages, that the gcc compiler didn't complain about (but clang of LLVM did ;o) ... the lost messages problem was still there. BUT: when I switched from ZMQ2 to

Re: [zeromq-dev] lost message due to EINTR

2015-01-27 Thread Pieter Hintjens
In CZMQ v3 the context is hidden and zctx is deprecated. However if you use the old CZMQ v2 API, or you use the libzmq API directly, you should be able to use multiple contexts safely. If you've a short example that shows the problem, we can investigate. -Pieter On Tue, Jan 27, 2015 at 10:05

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread sven . koebnick
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

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread Pieter Hintjens
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

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread Pieter Hintjens
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

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread sven . koebnick
the referenced fix should work for zmsg_send() but the same bug is in zmsg_recv() and there the application does not (yet) have any data. zmsg_recv() destroyes properly received frames 1 to n-1 if receiving frame n failes. Since the data is ONLY inside ZMQ at this time, the application cannot

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread Pieter Hintjens
In theory you cannot get an error between frames. Also, EINTR means the process is shutting down, so the benefit of retrying seems vague. Can you provide a reproducible test case? I do not like discussing abstracts we cannot actually disprove. On Fri, Jan 9, 2015 at 12:08 PM,

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread sven . koebnick
I get that error only during debuging inside Eclipse C++ (gdb). It seems irrelevant, if there are breakpoints set or not (but if there are any breakpoints, that stop the program, the number of EINTR is significantly higher). I also wonder about getting EINTR because of a debugger. Thet is

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread sven . koebnick
I now use some code doublicate of your cmzq code, that does frame send()ing with REUSE and retries in case of EINTR: I copied zmsg_recv() and wrapped the frame receiving in a loop checking EINTR. zmsg_t *zmsg_recv (void *source) { assert (source); zmsg_t *self = zmsg_new (); if (!self)

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread Pieter Hintjens
On Fri, Jan 9, 2015 at 1:25 PM, sven.koebn...@t-online.de wrote: I get that error only during debuging inside Eclipse C++ (gdb). Makes sense. The debugger is sending interrupt signals. It's going to make a mess of any logic that uses them. I don't think you can make the code robust against

Re: [zeromq-dev] lost message due to EINTR

2015-01-09 Thread Thomas Rodgers
Just a guess, are any watchpoints set in the debugging session? On Friday, January 9, 2015, sven.koebn...@t-online.de wrote: I get that error only during debuging inside Eclipse C++ (gdb). It seems irrelevant, if there are breakpoints set or not (but if there are any breakpoints, that stop

[zeromq-dev] lost message due to EINTR

2015-01-08 Thread sven . koebnick
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 (rc0) { if (errno == EINTR || errno == EAGAIN) { logWarn(temporary failure in zmq send() ... will be tried