[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: spurious connection_read()s





--On Friday, June 16, 2006 3:10 PM -0700 Howard Chu <hyc@symas.com> wrote:

Aaron Richton wrote:
Somewhere between 5-10 times per day (which really isn't that often for
the load around here), slapd outputs "connection_read(%ld): no
connection!\n", i.e. from connection.c. I ran a grep with context today,
and found that invariably, these are immediately following a "closed" log
message. For example:

 conn=626905 fd=109 closed
 connection_read(109): no connection!

 conn=648575 fd=109 closed
 connection_read(109): no connection!

 conn=649607 fd=112 closed
 connection_read(112): no connection!

 conn=165899 fd=347 closed
 connection_read(347): no connection!

 conn=27471 fd=99 closed
 connection_read(99): no connection!


Why would slapd try to "connection_read" something that it apparently knows is "closed"?


Generally this happens when a client sends an Unbind request and then immediately closes the connection. slapd processes the Unbind (in a worker thread) and begins closing the connection. At the same time, the listener thread gets a Readable event from select() because it detects that the connection has been closed by the remote end. The listener always calls connection_read() for Readable events, it doesn't know that a close is already in progress. This has nothing to do with any Solaris bugs or workarounds, it's just a natural occurrence, and the circumstance has always been there.

Huh, I never saw it appear in my logs until after the file descriptor fix went in.


--Quanah



--
Quanah Gibson-Mount
Principal Software Developer
ITS/Shared Application Services
Stanford University
GnuPG Public Key: http://www.stanford.edu/~quanah/pgp.html