Full_Name: Rein Tollevik Version: CVS head OS: URL: Submission from: (NULL) (81.93.160.250)
We have seen occasional seg. faults in syncprov_qtask() where it was passed a syncops pointer containing garbage in its arg. It looks as this could happen if syncprov_free_syncop is called to free an abandoned operation. I hope the patch at the should fix this, it makes sure to remove the syncops->s_qtask (if any) from the runqueue before freeing the syncops itself.
Rein Tollevik Basefarm AS
Index: OpenLDAP/servers/slapd/overlays/syncprov.c diff -u OpenLDAP/servers/slapd/overlays/syncprov.c:1.16 OpenLDAP/servers/slapd/overlays/syncprov.c:1.17 --- OpenLDAP/servers/slapd/overlays/syncprov.c:1.16 Fri Apr 18 10:56:41 2008 +++ OpenLDAP/servers/slapd/overlays/syncprov.c Tue Apr 22 16:38:27 2008 @@ -738,6 +738,13 @@ ldap_pvt_thread_mutex_unlock( &so->s_mutex ); return; } + if ( so->s_qtask ) { + ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); + if ( ldap_pvt_runqueue_isrunning( &slapd_rq, so->s_qtask ) ) + ldap_pvt_runqueue_stoptask( &slapd_rq, so->s_qtask ); + ldap_pvt_runqueue_remove( &slapd_rq, so->s_qtask ); + ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); + } ldap_pvt_thread_mutex_unlock( &so->s_mutex ); if ( so->s_flags & PS_IS_DETACHED ) { filter_free( so->s_op->ors_filter );