aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ccapi/server/ccs_lock_state.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/ccapi/server/ccs_lock_state.c b/src/ccapi/server/ccs_lock_state.c
index 78c7c6e..3893fc9 100644
--- a/src/ccapi/server/ccs_lock_state.c
+++ b/src/ccapi/server/ccs_lock_state.c
@@ -154,30 +154,30 @@ static cc_int32 ccs_lock_status_grant_lock (ccs_lock_state_t io_lock_state,
cc_uint64 in_pending_lock_index)
{
cc_int32 err = ccNoError;
-
+ ccs_lock_t pending_lock = NULL;
+ cc_uint32 type = 0;
+
if (!io_lock_state) { err = cci_check_error (ccErrBadParam); }
if (!err) {
- if (in_pending_lock_index < io_lock_state->first_pending_lock_index ||
- in_pending_lock_index >= ccs_lock_array_count (io_lock_state->locks)) {
+ pending_lock = ccs_lock_array_object_at_index (io_lock_state->locks,
+ in_pending_lock_index);
+ if (!pending_lock || in_pending_lock_index < io_lock_state->first_pending_lock_index) {
err = cci_check_error (ccErrBadParam);
}
}
if (!err) {
- ccs_lock_t pending_lock = ccs_lock_array_object_at_index (io_lock_state->locks,
- in_pending_lock_index);
- cc_uint32 type = 0;
- ccs_pipe_t pending_client_pipe = CCS_PIPE_NULL;
-
err = ccs_lock_type (pending_lock, &type);
+ }
+
+ if (!err && (type == cc_lock_upgrade || type == cc_lock_downgrade)) {
+ /* lock upgrades or downgrades. Find the old lock and remove it. */
+ ccs_pipe_t pending_client_pipe = CCS_PIPE_NULL;
- if (!err) {
- err = ccs_lock_client_pipe (pending_lock, &pending_client_pipe);
- }
+ err = ccs_lock_client_pipe (pending_lock, &pending_client_pipe);
- if (!err && (type == cc_lock_upgrade || type == cc_lock_downgrade)) {
- /* lock upgrades or downgrades. Find the old lock and remove it. */
+ if (!err) {
cc_uint64 i;
for (i = 0; !err && i < io_lock_state->first_pending_lock_index; i++) {
@@ -197,9 +197,9 @@ static cc_int32 ccs_lock_status_grant_lock (ccs_lock_state_t io_lock_state,
}
}
- if (!err) {
+ if (!err) {
cc_uint64 new_lock_index = 0;
-
+
err = ccs_lock_array_move (io_lock_state->locks,
in_pending_lock_index,
io_lock_state->first_pending_lock_index,
@@ -208,8 +208,7 @@ static cc_int32 ccs_lock_status_grant_lock (ccs_lock_state_t io_lock_state,
}
if (!err) {
- ccs_lock_t lock = ccs_lock_array_object_at_index (io_lock_state->locks, 0);
- err = ccs_lock_grant_lock (lock);
+ err = ccs_lock_grant_lock (pending_lock);
}
return cci_check_error (err);
@@ -411,7 +410,7 @@ cc_int32 ccs_lock_state_add (ccs_lock_state_t io_lock_state,
}
if (!err) {
- if (!can_grant_lock_now && !in_block) {
+ if (!can_grant_lock_now && (in_block == cc_lock_noblock)) {
err = cci_check_error (io_lock_state->pending_lock_err);
} else {