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

Re: (ITS#7968) SIGSEGV shortly after reconnection performed by syncrepl due to synchronization conflicts



Once again SIGSEGV.

I think the problem is not here, but in a connection cancel/abandon code.
It seems like race conditions with asynchronous connection dropping.
But currently I not review enough of code.

/servers/slapd/overlays/syncprov.c
@@ -1307,21 +1307,21 @@ syncprov_matchops( Operation *op, opcookie
*opc, int saveit )
                        op2.o_hdr = &oh;
                        op2.o_extra = op->o_extra;
                        op2.o_callback = NULL;
                        if (ss->s_flags & PS_FIX_FILTER) {
                                /* Skip the AND/GE clause that we
stuck on in front. We
                                   would lose deletes/mods that happen
during the refresh
                                   phase otherwise (ITS#6555) */
                                op2.ors_filter =
ss->s_op->ors_filter->f_and->f_next;
                        }
                        ldap_pvt_thread_mutex_unlock( &ss->s_mutex );
                        rc = test_filter( &op2, e, op2.ors_filter );
                }

                Debug( LDAP_DEBUG_NONE, "syncprov_matchops: sid %03x
fscope %d rc %d\n",
                        ss->s_sid, fc.fscope, rc );


Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f9762ffe700 (LWP 29507)]
test_filter (op=0x7f9762ffc210, e=0x7f96f19c37d8, f=0x20) at filterentry.c:69
69              if ( f->f_choice & SLAPD_FILTER_UNDEFINED ) {

(0) /opt/openldap.devel/libexec/slapd() [0x4430b7]: test_filter
/home/ly/Projects/openldap.git/servers/slapd/filterentry.c:69
(1) /opt/openldap.devel/libexec/slapd() [0x515081]: syncprov_matchops
/home/ly/Projects/openldap.git/servers/slapd/overlays/syncprov.c:1317
(2) /opt/openldap.devel/libexec/slapd() [0x515f43]: syncprov_op_response
/home/ly/Projects/openldap.git/servers/slapd/overlays/syncprov.c:1941
(3) /opt/openldap.devel/libexec/slapd() [0x434163]: slap_response_play
/home/ly/Projects/openldap.git/servers/slapd/result.c:509
(4) /opt/openldap.devel/libexec/slapd() [0x4346ca]: send_ldap_response
/home/ly/Projects/openldap.git/servers/slapd/result.c:584
(5) /opt/openldap.devel/libexec/slapd() [0x435062]: slap_send_ldap_result
/home/ly/Projects/openldap.git/servers/slapd/result.c:861
(6) /opt/openldap.devel/libexec/slapd() [0x4cb2e9]: mdb_add
/home/ly/Projects/openldap.git/servers/slapd/back-mdb/add.c:434
(7) /opt/openldap.devel/libexec/slapd() [0x48b506]: overlay_op_walk
/home/ly/Projects/openldap.git/servers/slapd/backover.c:674
(8) /opt/openldap.devel/libexec/slapd() [0x48b671]: over_op_func
/home/ly/Projects/openldap.git/servers/slapd/backover.c:724