[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
(ITS#5484) Remove runqueue task when freeing syncops bugfix
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 );