--Boundary-00=_k1GdIEk7s64l4zW Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline
On Saturday 21 June 2008 00:26:00 jwm@horde.net wrote:
On Fri, Jun 20, 2008 at 01:37:15PM -0700, Howard Chu wrote:
Program received signal SIGABRT, Aborted. [Switching to Thread -1963996240 (LWP 22635)] 0xb7bb1947 in raise () from /lib/tls/libc.so.6
This trace resembles ITS#5401, which was only fixed in RE24. You can look at the patch to syncprov.c there. There's no plan to make another 2.3 release at the moment.
I don't mind patching for this locally, since slapd is crashing every few days. I looked at the patch for ITS 5401 in RE24. I don't know enough about slapd internals to easily backport it to RE23 since a fair bit of the surrounding code differs between RE23 and RE24; would you be willing to do
The patches I found for this in RE24 seem to apply without problems on RE23. See attached patch its5401-re23.patch.
Howard, this includes syncprov.c 1.219->1.220 and 1.147.2.27->1.147.2.28 (see attached its5401.patch), was that all?
Regards, Buchan
--Boundary-00=_k1GdIEk7s64l4zW Content-Type: text/x-diff; charset="utf-8"; name="its5401-re23.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="its5401-re23.patch"
Index: servers/slapd/overlays/syncprov.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/syncprov.c,v retrieving revision 1.56.2.50 diff -u -r1.56.2.50 syncprov.c --- servers/slapd/overlays/syncprov.c 14 May 2008 00:49:04 -0000 1.56.2.50 +++ servers/slapd/overlays/syncprov.c 9 Jul 2008 07:22:23 -0000 @@ -1840,12 +1840,10 @@ op2->o_do_not_cache = 1;
/* Add op2 to conn so abandon will find us */ - ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); op->o_conn->c_n_ops_executing++; op->o_conn->c_n_ops_completed--; LDAP_STAILQ_INSERT_TAIL( &op->o_conn->c_ops, op2, o_next ); so->s_flags |= PS_IS_DETACHED; - ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
/* Prevent anyone else from trying to send a result for this op */ op->o_abandon = 1; @@ -1933,15 +1931,27 @@
/* Detach this Op from frontend control */ ldap_pvt_thread_mutex_lock( &ss->ss_so->s_mutex ); + ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
- /* Turn off the refreshing flag */ - ss->ss_so->s_flags ^= PS_IS_REFRESHING; + /* But not if this connection was closed along the way */ + if ( op->o_abandon ) { + ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); + ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex ); + /* syncprov_ab_cleanup will free this syncop */ + return SLAPD_ABANDON;
- syncprov_detach_op( op, ss->ss_so, on ); + } else { + /* Turn off the refreshing flag */ + ss->ss_so->s_flags ^= PS_IS_REFRESHING; + + syncprov_detach_op( op, ss->ss_so, on );
- /* If there are queued responses, fire them off */ - if ( ss->ss_so->s_res ) - syncprov_qstart( ss->ss_so ); + ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); + + /* If there are queued responses, fire them off */ + if ( ss->ss_so->s_res ) + syncprov_qstart( ss->ss_so ); + } ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex );
return LDAP_SUCCESS;
--Boundary-00=_k1GdIEk7s64l4zW Content-Type: text/x-diff; charset="utf-8"; name="its5401.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="its5401.patch"
--- servers/slapd/overlays/syncprov.c 2008/03/12 21:31:28 1.219 +++ servers/slapd/overlays/syncprov.c 2008/03/13 09:49:32 1.220 @@ -1,4 +1,4 @@ -/* $OpenLDAP: servers/slapd/overlays/syncprov.c,v 1.219 2008/03/12 21:31:28 ando Exp $ */ +/* $OpenLDAP: servers/slapd/overlays/syncprov.c,v 1.220 2008/03/13 09:49:32 hyc Exp $ */ /* syncprov.c - syncrepl provider */ /* This work is part of OpenLDAP Software http://www.openldap.org/. * @@ -1940,12 +1940,10 @@ op2->o_do_not_cache = 1;
/* Add op2 to conn so abandon will find us */ - ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); op->o_conn->c_n_ops_executing++; op->o_conn->c_n_ops_completed--; LDAP_STAILQ_INSERT_TAIL( &op->o_conn->c_ops, op2, o_next ); so->s_flags |= PS_IS_DETACHED; - ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
/* Prevent anyone else from trying to send a result for this op */ op->o_abandon = 1; @@ -2055,15 +2053,27 @@
/* Detach this Op from frontend control */ ldap_pvt_thread_mutex_lock( &ss->ss_so->s_mutex ); + ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
- /* Turn off the refreshing flag */ - ss->ss_so->s_flags ^= PS_IS_REFRESHING; + /* But not if this connection was closed along the way */ + if ( op->o_abandon ) { + ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); + ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex ); + syncprov_free_syncop( ss->ss_so ); + return SLAPD_ABANDON;
- syncprov_detach_op( op, ss->ss_so, on ); + } else { + /* Turn off the refreshing flag */ + ss->ss_so->s_flags ^= PS_IS_REFRESHING; + + syncprov_detach_op( op, ss->ss_so, on );
- /* If there are queued responses, fire them off */ - if ( ss->ss_so->s_res ) - syncprov_qstart( ss->ss_so ); + ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); + + /* If there are queued responses, fire them off */ + if ( ss->ss_so->s_res ) + syncprov_qstart( ss->ss_so ); + } ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex );
return LDAP_SUCCESS; diff -u -r1.147.2.27 -r1.147.2.28 --- servers/slapd/overlays/syncprov.c 2008/05/28 16:35:32 1.147.2.27 +++ servers/slapd/overlays/syncprov.c 2008/05/29 15:02:45 1.147.2.28 @@ -1,4 +1,4 @@ -/* $OpenLDAP: servers/slapd/overlays/syncprov.c,v 1.147.2.27 2008/05/28 16:35:32 quanah Exp $ */ +/* $OpenLDAP: servers/slapd/overlays/syncprov.c,v 1.147.2.28 2008/05/29 15:02:45 hyc Exp $ */ /* syncprov.c - syncrepl provider */ /* This work is part of OpenLDAP Software http://www.openldap.org/. * @@ -2107,7 +2107,7 @@ if ( op->o_abandon ) { ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex ); - syncprov_free_syncop( ss->ss_so ); + /* syncprov_ab_cleanup will free this syncop */ return SLAPD_ABANDON;
} else {
--Boundary-00=_k1GdIEk7s64l4zW--