mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-16 20:06:06 -05:00
ITS#8486 Don't keep sl_mutex locked when playing the sessionlog
This commit is contained in:
parent
735b6c995e
commit
dc3b3be429
1 changed files with 10 additions and 0 deletions
|
|
@ -131,6 +131,7 @@ typedef struct sessionlog {
|
|||
int sl_numcsns;
|
||||
int sl_num;
|
||||
int sl_size;
|
||||
int sl_playing;
|
||||
slog_entry *sl_head;
|
||||
slog_entry *sl_tail;
|
||||
ldap_pvt_thread_mutex_t sl_mutex;
|
||||
|
|
@ -1552,12 +1553,15 @@ syncprov_add_slog( Operation *op )
|
|||
* wipe out anything in the log if we see them.
|
||||
*/
|
||||
ldap_pvt_thread_mutex_lock( &sl->sl_mutex );
|
||||
/* can only do this if no one else is reading the log at the moment */
|
||||
if (!sl->sl_playing) {
|
||||
while ( se = sl->sl_head ) {
|
||||
sl->sl_head = se->se_next;
|
||||
ch_free( se );
|
||||
}
|
||||
sl->sl_tail = NULL;
|
||||
sl->sl_num = 0;
|
||||
}
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
return;
|
||||
}
|
||||
|
|
@ -1608,6 +1612,7 @@ syncprov_add_slog( Operation *op )
|
|||
}
|
||||
}
|
||||
sl->sl_num++;
|
||||
if (!sl->sl_playing) {
|
||||
while ( sl->sl_num > sl->sl_size ) {
|
||||
int i;
|
||||
se = sl->sl_head;
|
||||
|
|
@ -1624,6 +1629,7 @@ syncprov_add_slog( Operation *op )
|
|||
ch_free( se );
|
||||
sl->sl_num--;
|
||||
}
|
||||
}
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
}
|
||||
}
|
||||
|
|
@ -1658,6 +1664,8 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
|||
num = sl->sl_num;
|
||||
i = 0;
|
||||
nmods = 0;
|
||||
sl->sl_playing++;
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
|
||||
uuids = op->o_tmpalloc( (num+1) * sizeof( struct berval ) +
|
||||
num * UUID_LEN, op->o_tmpmemctx );
|
||||
|
|
@ -1714,6 +1722,8 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
|||
AC_MEMCPY(uuids[j].bv_val, se->se_uuid.bv_val, UUID_LEN);
|
||||
uuids[j].bv_len = UUID_LEN;
|
||||
}
|
||||
ldap_pvt_thread_mutex_lock( &sl->sl_mutex );
|
||||
sl->sl_playing--;
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
|
||||
ndel = i;
|
||||
|
|
|
|||
Loading…
Reference in a new issue