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

ITS#5835 insights?



Does anyone have any thoughts on ITS#5835?

The server keeps hitting the assert in connection.c:

static void
connection_close( Connection *c )
{
       ber_socket_t    sd = AC_SOCKET_INVALID;

       assert( connections != NULL );
       assert( c != NULL );

       /* ITS#4667 we may have gotten here twice */
       if ( c->c_conn_state == SLAP_C_INVALID )
               return;

       assert( c->c_struct_state == SLAP_C_USED );
-->        assert( c->c_conn_state == SLAP_C_CLOSING );

Which was called by connections_timeout_idle in connection.c:

               if( difftime( c->c_activitytime+global_idletimeout, now) <
0 ) {
                       /* close it */
                       connection_closing( c, "idletimeout" );
-->                        connection_close( c );
                       i++;


With the modified debug logging Howard checked in, I see the following steps taking place:


Dec  2 03:06:05 ldap slapd[8292]: connection_closing: readying conn=3049
sd=28 for close

so we know it made it into connection_closing.

Then we see:

Dec  2 03:06:05 ldap slapd[8292]: connection_resched: attempting closing
conn=3049 sd=28

which means it made it to connection_resched, which calls connection_close:

               Debug( LDAP_DEBUG_CONNS, "connection_resched: "
                       "attempting closing conn=%lu sd=%d\n",
                       conn->c_connid, sd, 0 );
               connection_close( conn );


Doesn't this directly conflict with line 242 above, which also calls connection_close on the connection?


I also see this comment in the connection_closing code:

/* ITS#4667 this may allow another thread to drop into
* connection_resched / connection_close before we
* finish, but that's OK.
*/



I'm honestly not sure this is really "OK". The only place I see connection_resched called is from connection_operation, and I don't see exactly how I'ved ended up in there in this code path.


--Quanah


--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration