Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
23edc84b
Commit
23edc84b
authored
Jan 19, 2018
by
Howard Chu
Committed by
Quanah Gibson-Mount
Feb 11, 2018
Browse files
ITS
#8486
Don't keep sl_mutex locked when playing the sessionlog
parent
c73f5b78
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/overlays/syncprov.c
View file @
23edc84b
...
...
@@ -130,6 +130,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
;
...
...
@@ -1540,12 +1541,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
;
}
...
...
@@ -1596,6 +1600,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
;
...
...
@@ -1612,6 +1617,7 @@ syncprov_add_slog( Operation *op )
ch_free
(
se
);
sl
->
sl_num
--
;
}
}
ldap_pvt_thread_mutex_unlock
(
&
sl
->
sl_mutex
);
}
}
...
...
@@ -1646,6 +1652,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
);
...
...
@@ -1702,6 +1710,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
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment