[erlang-questions] prim_inet:ignorefd/2 affecting erts_poll_wait()

Michael Truog mjtruog@REDACTED
Sat Aug 23 02:46:21 CEST 2014

I have been seeing the erts_poll_wait() thread consume 100% CPU when my 
configuration makes prim_inet:ignorefd/2 ignore a fd (inet_descriptor 
has is_ignored set to true) created external to inet (10 file 
descriptors created this way).  I don't have this problem when using the 
inet code to create tcp sockets, when prim_inet:ignorefd/2 is not used 
with the same configuration.  When setting "#define INET_DRV_DEBUG 1" in 
"./erts/emulator/drivers/common/inet_drv.c" and "#define 
ERTS_POLL_DEBUG_PRINT" in "./erts/emulator/sys/common/erl_poll.c" all 
the debugging output looks the same when exercising the file descriptors 
in the same way.  The only difference seems to be the "Entering 
erts_poll_wait(), timeout=NUMBER" output has non-zero timeout values 
more often when prim_inet:ignorefd/2 is not used when compare to the 
output when it is being used.  Also, the NUMBER doesn't seem to go about 
1000 for me when prim_inet:ignorefd/2 is used, but it can go above 1000 
when prim_inet:ignorefd/2 is not used.

Why would the erts_poll_wait() loop be refusing to timeout?  Is this 
expected behaviour?  Is there an erts configuration flag which is meant 
to address the problem?


More information about the erlang-questions mailing list