Diff for /servers/slapd/overlays/syncprov.c between versions 1.56.2.44 and 1.56.2.46

version 1.56.2.44, 2007/07/12 00:36:36 version 1.56.2.46, 2007/10/08 16:13:54
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.56.2.43 2007/06/08 07:08:39 hyc Exp $ */  /* $OpenLDAP$ */
 /* syncprov.c - syncrepl provider */  /* syncprov.c - syncrepl provider */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
Line 642  again: Line 642  again:
                 } else {                  } else {
                         cf.f_choice = LDAP_FILTER_LE;                          cf.f_choice = LDAP_FILTER_LE;
                         fop.ors_limit = &fc_limits;                          fop.ors_limit = &fc_limits;
                           memset( &fc_limits, 0, sizeof( fc_limits ));
                         fc_limits.lms_s_unchecked = 1;                          fc_limits.lms_s_unchecked = 1;
                         fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)",                          fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)",
                                 cf.f_av_value.bv_val );                                  cf.f_av_value.bv_val );
Line 1502  syncprov_op_response( Operation *op, Sla Line 1503  syncprov_op_response( Operation *op, Sla
         {          {
                 struct berval maxcsn = BER_BVNULL;                  struct berval maxcsn = BER_BVNULL;
                 char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];                  char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
                 int do_check=0;                  int do_check = 0, have_psearches;
   
                 /* Update our context CSN */                  /* Update our context CSN */
                 cbuf[0] = '\0';                  cbuf[0] = '\0';
Line 1547  syncprov_op_response( Operation *op, Sla Line 1548  syncprov_op_response( Operation *op, Sla
                 opc->sctxcsn.bv_val = cbuf;                  opc->sctxcsn.bv_val = cbuf;
   
                 /* Handle any persistent searches */                  /* Handle any persistent searches */
                 if ( si->si_ops ) {                  ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
                   have_psearches = ( si->si_ops != NULL );
                   ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
                   if ( have_psearches ) {
                         switch(op->o_tag) {                          switch(op->o_tag) {
                         case LDAP_REQ_ADD:                          case LDAP_REQ_ADD:
                         case LDAP_REQ_MODIFY:                          case LDAP_REQ_MODIFY:
Line 1652  syncprov_op_mod( Operation *op, SlapRepl Line 1656  syncprov_op_mod( Operation *op, SlapRepl
 {  {
         slap_overinst           *on = (slap_overinst *)op->o_bd->bd_info;          slap_overinst           *on = (slap_overinst *)op->o_bd->bd_info;
         syncprov_info_t         *si = on->on_bi.bi_private;          syncprov_info_t         *si = on->on_bi.bi_private;
           slap_callback *cb;
           opcookie *opc;
           int have_psearches, cbsize;
   
           ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
           have_psearches = ( si->si_ops != NULL );
           ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
   
           cbsize = sizeof(slap_callback) + sizeof(opcookie) +
                   (have_psearches ? sizeof(modinst) : 0 );
   
         slap_callback *cb = op->o_tmpcalloc(1, sizeof(slap_callback)+          cb = op->o_tmpcalloc(1, cbsize, op->o_tmpmemctx);
                 sizeof(opcookie) +          opc = (opcookie *)(cb+1);
                 (si->si_ops ? sizeof(modinst) : 0 ),  
                 op->o_tmpmemctx);  
         opcookie *opc = (opcookie *)(cb+1);  
         opc->son = on;          opc->son = on;
         cb->sc_response = syncprov_op_response;          cb->sc_response = syncprov_op_response;
         cb->sc_cleanup = syncprov_op_cleanup;          cb->sc_cleanup = syncprov_op_cleanup;
Line 1668  syncprov_op_mod( Operation *op, SlapRepl Line 1679  syncprov_op_mod( Operation *op, SlapRepl
         /* If there are active persistent searches, lock this operation.          /* If there are active persistent searches, lock this operation.
          * See seqmod.c for the locking logic on its own.           * See seqmod.c for the locking logic on its own.
          */           */
         if ( si->si_ops ) {          if ( have_psearches ) {
                 modtarget *mt, mtdummy;                  modtarget *mt, mtdummy;
                 modinst *mi;                  modinst *mi;
   
Line 1715  syncprov_op_mod( Operation *op, SlapRepl Line 1726  syncprov_op_mod( Operation *op, SlapRepl
                 }                  }
         }          }
   
         if (( si->si_ops || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )          if (( have_psearches || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )
                 syncprov_matchops( op, opc, 1 );                  syncprov_matchops( op, opc, 1 );
   
         return SLAP_CB_CONTINUE;          return SLAP_CB_CONTINUE;
Line 1864  syncprov_search_response( Operation *op, Line 1875  syncprov_search_response( Operation *op,
                         a = attr_find( rs->sr_operational_attrs, slap_schema.si_ad_entryCSN );                          a = attr_find( rs->sr_operational_attrs, slap_schema.si_ad_entryCSN );
                 }                  }
                 if ( a ) {                  if ( a ) {
                           /* If not a persistent search */
                         /* Make sure entry is less than the snapshot'd contextCSN */                          /* Make sure entry is less than the snapshot'd contextCSN */
                         if ( ber_bvcmp( &a->a_nvals[0], &ss->ss_ctxcsn ) > 0 ) {                          if ( !ss->ss_so && ber_bvcmp( &a->a_nvals[0], &ss->ss_ctxcsn ) > 0 ) {
                                 Debug( LDAP_DEBUG_SYNC, "Entry %s CSN %s greater than snapshot %s\n",                                  Debug( LDAP_DEBUG_SYNC, "Entry %s CSN %s greater than snapshot %s\n",
                                         rs->sr_entry->e_name.bv_val,                                          rs->sr_entry->e_name.bv_val,
                                         a->a_nvals[0].bv_val,                                          a->a_nvals[0].bv_val,
Line 2461  syncprov_db_close( Line 2473  syncprov_db_close(
                 return 0;                  return 0;
         }          }
         if ( si->si_numops ) {          if ( si->si_numops ) {
                 Connection conn;                  Connection conn = {0};
                 OperationBuffer opbuf;                  OperationBuffer opbuf;
                 Operation *op = (Operation *) &opbuf;                  Operation *op = (Operation *) &opbuf;
                 SlapReply rs = {REP_RESULT};                  SlapReply rs = {REP_RESULT};

Removed from v.1.56.2.44  
changed lines
  Added in v.1.56.2.46


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org