Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
orbea -
OpenLDAP
Commits
5d8ece60
Commit
5d8ece60
authored
Feb 18, 2005
by
Howard Chu
Browse files
ITS#3549 cleanup abandon/cancel processing
parent
1b244bba
Changes
3
Hide whitespace changes
Inline
Side-by-side
servers/slapd/abandon.c
View file @
5d8ece60
...
...
@@ -75,27 +75,29 @@ do_abandon( Operation *op, SlapReply *rs )
LDAP_STAILQ_FOREACH
(
o
,
&
op
->
o_conn
->
c_ops
,
o_next
)
{
if
(
o
->
o_msgid
==
id
)
{
o
->
o_abandon
=
1
;
goto
done
;
break
;
}
}
LDAP_STAILQ_FOREACH
(
o
,
&
op
->
o_conn
->
c_pending_ops
,
o_next
)
{
if
(
o
->
o_msgid
==
id
)
{
LDAP_STAILQ_REMOVE
(
&
op
->
o_conn
->
c_pending_ops
,
o
,
slap_op
,
o_next
);
LDAP_STAILQ_NEXT
(
o
,
o_next
)
=
NULL
;
op
->
o_conn
->
c_n_ops_pending
--
;
slap_op_free
(
o
);
goto
done
;
if
(
o
)
{
op
->
orn_msgid
=
id
;
op
->
o_bd
=
frontendDB
;
rs
->
sr_err
=
frontendDB
->
be_abandon
(
op
,
rs
);
}
else
{
LDAP_STAILQ_FOREACH
(
o
,
&
op
->
o_conn
->
c_pending_ops
,
o_next
)
{
if
(
o
->
o_msgid
==
id
)
{
LDAP_STAILQ_REMOVE
(
&
op
->
o_conn
->
c_pending_ops
,
o
,
slap_op
,
o_next
);
LDAP_STAILQ_NEXT
(
o
,
o_next
)
=
NULL
;
op
->
o_conn
->
c_n_ops_pending
--
;
slap_op_free
(
o
);
break
;
}
}
}
done:
op
->
orn_msgid
=
id
;
op
->
o_bd
=
frontendDB
;
rs
->
sr_err
=
frontendDB
->
be_abandon
(
op
,
rs
);
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
Debug
(
LDAP_DEBUG_TRACE
,
"do_abandon: op=%ld %sfound
\n
"
,
...
...
servers/slapd/cancel.c
View file @
5d8ece60
...
...
@@ -32,7 +32,6 @@ int cancel_extop( Operation *op, SlapReply *rs )
{
Operation
*
o
;
int
rc
;
int
found
=
0
;
int
opid
;
BerElement
*
ber
;
int
i
;
...
...
@@ -69,61 +68,53 @@ int cancel_extop( Operation *op, SlapReply *rs )
LDAP_STAILQ_NEXT
(
o
,
o_next
)
=
NULL
;
op
->
o_conn
->
c_n_ops_pending
--
;
slap_op_free
(
o
);
found
=
1
;
b
re
ak
;
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
)
;
re
turn
LDAP_SUCCESS
;
}
}
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
if
(
found
)
return
LDAP_SUCCESS
;
found
=
0
;
ldap_pvt_thread_mutex_lock
(
&
op
->
o_conn
->
c_mutex
);
LDAP_STAILQ_FOREACH
(
o
,
&
op
->
o_conn
->
c_ops
,
o_next
)
{
if
(
o
->
o_msgid
==
opid
)
{
found
=
1
;
o
->
o_abandon
=
1
;
break
;
}
}
if
(
!
found
)
{
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
if
(
o
)
{
if
(
o
->
o_cancel
!=
SLAP_CANCEL_NONE
)
{
rs
->
sr_text
=
"message ID already being cancelled"
;
return
LDAP_PROTOCOL_ERROR
;
}
o
->
o_cancel
=
SLAP_CANCEL_REQ
;
for
(
i
=
0
;
i
<
nbackends
;
i
++
)
{
op
->
o_bd
=
&
backends
[
i
];
if
(
!
op
->
o_bd
->
be_cancel
)
continue
;
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
op
->
oq_cancel
.
rs_msgid
=
opid
;
if
(
op
->
o_bd
->
be_cancel
(
op
,
rs
)
==
LDAP_SUCCESS
)
{
return
LDAP_SUCCESS
;
}
ldap_pvt_thread_mutex_lock
(
&
op
->
o_conn
->
c_mutex
);
}
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
rs
->
sr_text
=
"message ID not found"
;
return
LDAP_NO_SUCH_OPERATION
;
}
if
(
op
->
o_cancel
!=
SLAP_CANCEL_NONE
)
{
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
rs
->
sr_text
=
"message ID already being cancelled"
;
return
LDAP_PROTOCOL_ERROR
;
}
op
->
o_cancel
=
SLAP_CANCEL_REQ
;
ldap_pvt_thread_mutex_unlock
(
&
op
->
o_conn
->
c_mutex
);
while
(
o
->
o_cancel
==
SLAP_CANCEL_REQ
)
{
ldap_pvt_thread_yield
();
}
while
(
op
->
o_cancel
==
SLAP_CANCEL_REQ
)
{
ldap_pvt_thread_yield
();
}
if
(
o
->
o_cancel
==
SLAP_CANCEL_ACK
)
{
rc
=
LDAP_SUCCESS
;
}
else
{
rc
=
o
->
o_cancel
;
}
if
(
op
->
o_cancel
==
SLAP_CANCEL_ACK
)
{
rc
=
LDAP_SUCCESS
;
o
->
o_cancel
=
SLAP_CANCEL_DONE
;
}
else
{
rc
=
op
->
o_cancel
;
rs
->
sr_text
=
"message ID not found"
;
rc
=
LDAP_NO_SUCH_OPERATION
;
}
op
->
o_cancel
=
SLAP_CANCEL_DONE
;
return
rc
;
}
servers/slapd/connection.c
View file @
5d8ece60
...
...
@@ -1049,7 +1049,10 @@ operations_error:
}
if
(
op
->
o_cancel
==
SLAP_CANCEL_REQ
)
{
op
->
o_cancel
=
LDAP_TOO_LATE
;
if
(
rc
==
SLAPD_ABANDON
)
op
->
o_cancel
=
SLAP_CANCEL_ACK
;
else
op
->
o_cancel
=
LDAP_TOO_LATE
;
}
while
(
op
->
o_cancel
!=
SLAP_CANCEL_NONE
&&
op
->
o_cancel
!=
SLAP_CANCEL_DONE
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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