This is an automated email from the git hooks/post-receive script.
mreynolds pushed a change to branch 389-ds-base-1.3.6 in repository 389-ds-base.
from b45afc2 Ticket 49780 - (backport) acl_copyEval_context double free new c154889 Ticket 49696: replicated operations should be serialized
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: ldap/servers/slapd/connection.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
This is an automated email from the git hooks/post-receive script.
mreynolds pushed a commit to branch 389-ds-base-1.3.6 in repository 389-ds-base.
commit c154889636285c93463dec32ca982d81103ba077 Author: Mark Reynolds mreynolds@redhat.com Date: Thu Sep 6 12:35:59 2018 -0400
Ticket 49696: replicated operations should be serialized
Bug: there was a scenario where two threads could process replication operations in parallel. The reason was that for a new repl start request the repl conn flag is not set and the connection is made readable. When the start repl op is finished, the flagi set, but in a small window the supplier could already have sent updates and more_data would trigger this thread also to continue to process repl operations.
Fix: In the situation where a thread successfully processed a start repl request and just set the repl_conn flag do not use more_data.
Reviewed by: ? --- ldap/servers/slapd/connection.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c index c1b4478..6991fbd 100644 --- a/ldap/servers/slapd/connection.c +++ b/ldap/servers/slapd/connection.c @@ -1819,9 +1819,17 @@ done:
/* If we're in turbo mode, we keep our reference to the connection alive */ /* can't use the more_data var because connection could have changed in another thread */ - more_data = conn_buffered_data_avail_nolock(conn, &conn_closed) ? 1 : 0; - slapi_log_err(SLAPI_LOG_CONNS,"connection_threadmain", "conn %" PRIu64 " check more_data %d thread_turbo_flag %d\n", - conn->c_connid,more_data,thread_turbo_flag); + slapi_log_err(SLAPI_LOG_CONNS, "connection_threadmain", "conn %" PRIu64 " check more_data %d thread_turbo_flag %d" + "repl_conn_bef %d, repl_conn_now %d\n", + conn->c_connid, more_data, thread_turbo_flag, + replication_connection, conn->c_isreplication_session); + if (!replication_connection && conn->c_isreplication_session) { + /* it a connection that was just flagged as replication connection */ + more_data = 0; + } else { + /* normal connection or already established replication connection */ + more_data = conn_buffered_data_avail_nolock(conn, &conn_closed) ? 1 : 0; + } if (!more_data) { if (!thread_turbo_flag) { /*
389-commits@lists.fedoraproject.org