summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Boreham <dboreham@redhat.com>2005-05-12 03:43:15 +0000
committerDavid Boreham <dboreham@redhat.com>2005-05-12 03:43:15 +0000
commitc35b2451f5ec6c56384c1596b860975ca5d0a120 (patch)
tree86005388701eb2def57ea97bf0be855d3c8c77be
parente57cfacec154d8f473291db43c0d429ca519d400 (diff)
downloadds-c35b2451f5ec6c56384c1596b860975ca5d0a120.tar.gz
ds-c35b2451f5ec6c56384c1596b860975ca5d0a120.tar.xz
ds-c35b2451f5ec6c56384c1596b860975ca5d0a120.zip
Fix Windows SSL replication in-order processing of operatations
-rw-r--r--ldap/servers/slapd/connection.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index e7a85243..b0fc7e05 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -64,6 +64,7 @@ static void op_copy_identity(Connection *conn, Operation *op);
static int is_ber_too_big(const Connection *conn,unsigned long ber_len);
static void log_ber_too_big_error(const Connection *conn,
unsigned long ber_len, unsigned long maxbersize);
+static int add_to_select_set(Connection *conn);
/*
* We maintain a global work queue of Slapi_PBlock's that have not yet
@@ -765,7 +766,12 @@ static int handle_read_data(Connection *conn,Operation **op,
if (replication_session) {
/* Initiate any deferred I/O here */
if (defer_io) {
- return_value2 = issue_new_read(conn);
+ if (conn->c_flags & CONN_FLAG_SSL) {
+ add_to_select_set(conn);
+ return_value2 = 0;
+ } else {
+ return_value2 = issue_new_read(conn);
+ }
}
if (defer_pushback) {
return_value2 = queue_pushed_back_data(conn);
@@ -1152,7 +1158,11 @@ static int read_the_data(Connection *conn, int *process_op, int *defer_io, int *
priv->c_current_op = NULL;
priv->c_flags = 0;
return_value = 0;
- add_to_select_set(conn);
+ if (!conn->c_isreplication_session) {
+ add_to_select_set(conn);
+ } else {
+ *defer_io = 1;
+ }
}
return return_value;