[zeromq-dev] ZeroMQ 'make check' failure
matt.connolly at me.com
Sun Nov 10 12:17:34 CET 2013
I had a little look into this and found that after about 2500 sockets, new sockets are created, but their mailbox’s signaller file descriptors are zero. errno at this point is EMFILE (too many open files).
This zero file descriptor causes the assert later when context terminate sends a stop message to that socket, the write to the signaller fails. The code in errno is 2 (ENOENT). There’s no error checking where the file descriptor is created. And even if there was, it’s in the signaller constructor where you don’t have a return value.
However, it looks like in signaler.cpp:485 that failed file descriptors are not actually set to zero, so zero could be a lucky uninitialised value, in contrast to the comment in signaler.hpp:62 that the file descriptors would be -1 if unavailable.
haha… setting them to -1 makes the socket create fail. Pull request on it’s way.
On 10 Nov 2013, at 8:09 am, Bruno D. Rodrigues <bruno.rodrigues at litux.org> wrote:
> I think I got it but need to investigate the Darwin documentation and
> test more. After dinner or tomorrow though.
> Bruno Rodrigues
> Sent from my iPhone
> No dia 09/11/2013, às 21:52, Pieter Hintjens <ph at imatix.com> escreveu:
>> On Sat, Nov 9, 2013 at 10:15 PM, Bruno D. Rodrigues
>> <bruno.rodrigues at litux.org> wrote:
>>> On the mac, it just creates sockets non stop. I’ve set the limit to 128*1024 and it happily creates them all (or fakes it), and then of course dies when they are closed, or most probably when they are attempted to be used.
>>> Will follow the create socket and try to understand what is failing here…
>> There are at least three different paths in the code
>> (signaller.cpp)... Presumably the error handling in the non-Linux path
>> is wrong.
>> Curious to see what you turn up.
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
More information about the zeromq-dev