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

Re: spurious connection_read()s



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.


--
 -- Howard Chu
 Chief Architect, Symas Corp.  http://www.symas.com
 Director, Highland Sun        http://highlandsun.com/hyc
 OpenLDAP Core Team            http://www.openldap.org/project/