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
openldap
OpenLDAP
Commits
08949463
Commit
08949463
authored
Jun 28, 2004
by
Jong Hyuk Choi
Browse files
- use ctxcsn_locker for the ctxcsn add transaction
- removal of LOCK_ID_FREE - misc mem mgmt cleanup
parent
44485522
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-bdb/ctxcsn.c
View file @
08949463
...
...
@@ -259,6 +259,7 @@ bdb_get_commit_csn(
int
rc
;
struct
sync_cookie
syncCookie
=
{
NULL
,
-
1
,
NULL
};
syncinfo_t
*
si
;
u_int32_t
ctxcsn_locker
=
0
;
if
(
op
->
o_sync_mode
!=
SLAP_SYNC_NONE
&&
!
LDAP_STAILQ_EMPTY
(
&
op
->
o_bd
->
be_syncinfo
))
{
...
...
@@ -282,21 +283,16 @@ consumer_ctxcsn_retry :
}
break
;
case
LDAP_BUSY
:
ch_free
(
ctxcsn_ndn
.
bv_val
);
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
);
return
LDAP_BUSY
;
goto
done
;
case
DB_LOCK_DEADLOCK
:
case
DB_LOCK_NOTGRANTED
:
goto
consumer_ctxcsn_retry
;
case
DB_NOTFOUND
:
ch_free
(
ctxcsn_ndn
.
bv_val
);
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
);
return
LDAP_OTHER
;
rs
->
sr_err
=
LDAP_OTHER
;
goto
done
;
default:
ch_free
(
ctxcsn_ndn
.
bv_val
);
ctxcsn_ndn
.
bv_val
=
NULL
;
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
);
return
LDAP_OTHER
;
rs
->
sr_err
=
LDAP_OTHER
;
goto
done
;
}
if
(
ctxcsn_e
)
{
...
...
@@ -345,15 +341,12 @@ provider_ctxcsn_retry :
0
,
locker
,
ctxcsn_lock
);
switch
(
rs
->
sr_err
)
{
case
0
:
ch_free
(
ctxcsn_ndn
.
bv_val
);
if
(
ctxcsn_ei
)
{
ctxcsn_e
=
ctxcsn_ei
->
bei_e
;
}
break
;
case
LDAP_BUSY
:
ch_free
(
ctxcsn_ndn
.
bv_val
);
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
);
return
LDAP_BUSY
;
goto
done
;
case
DB_LOCK_DEADLOCK
:
case
DB_LOCK_NOTGRANTED
:
goto
provider_ctxcsn_retry
;
...
...
@@ -366,9 +359,10 @@ provider_ctxcsn_retry :
if
(
0
)
{
txn_retry:
rs
->
sr_err
=
TXN_ABORT
(
ltid
);
ltid
=
NULL
;
if
(
rs
->
sr_err
!=
0
)
{
rs
->
sr_err
=
LDAP_OTHER
;
return
rs
->
sr_err
;
goto
done
;
}
ldap_pvt_thread_yield
();
bdb_trans_backoff
(
++
num_retries
);
...
...
@@ -377,15 +371,17 @@ txn_retry:
&
ltid
,
bdb
->
bi_db_opflags
);
if
(
rs
->
sr_err
!=
0
)
{
rs
->
sr_err
=
LDAP_OTHER
;
return
rs
->
sr_err
;
goto
done
;
}
ctxcsn_locker
=
TXN_ID
(
ltid
);
rs
->
sr_err
=
bdb_csn_commit
(
op
,
rs
,
ltid
,
NULL
,
&
suffix_ei
,
&
ctxcsn_e
,
&
ctxcsn_added
,
locker
);
&
ctxcsn_e
,
&
ctxcsn_added
,
ctxcsn_
locker
);
switch
(
rs
->
sr_err
)
{
case
BDB_CSN_ABORT
:
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
)
;
return
LDAP_OTHER
;
rs
->
sr_err
=
LDAP_OTHER
;
goto
done
;
case
BDB_CSN_RETRY
:
goto
txn_retry
;
}
...
...
@@ -393,21 +389,22 @@ txn_retry:
rs
->
sr_err
=
TXN_PREPARE
(
ltid
,
gid
);
if
(
rs
->
sr_err
!=
0
)
{
rs
->
sr_err
=
LDAP_OTHER
;
return
rs
->
sr_err
;
goto
done
;
}
bdb_cache_add
(
bdb
,
suffix_ei
,
ctxcsn_e
,
(
struct
berval
*
)
&
slap_ldapsync_cn_bv
,
locker
);
(
struct
berval
*
)
&
slap_ldapsync_cn_bv
,
ctxcsn_
locker
);
rs
->
sr_err
=
TXN_COMMIT
(
ltid
,
0
);
if
(
rs
->
sr_err
!=
0
)
{
rs
->
sr_err
=
LDAP_OTHER
;
return
rs
->
sr_err
;
goto
done
;
}
rs
->
sr_err
=
bdb_dn2entry
(
op
,
NULL
,
&
ctxcsn_ndn
,
&
ctxcsn_ei
,
0
,
locker
,
ctxcsn_lock
);
0
,
ctxcsn_
locker
,
ctxcsn_lock
);
ch_free
(
ctxcsn_ndn
.
bv_val
);
ctxcsn_ndn
.
bv_val
=
NULL
;
if
(
ctxcsn_ei
)
{
ctxcsn_e
=
ctxcsn_ei
->
bei_e
;
...
...
@@ -415,9 +412,8 @@ txn_retry:
break
;
default:
ch_free
(
ctxcsn_ndn
.
bv_val
);
LOCK_ID_FREE
(
bdb
->
bi_dbenv
,
locker
);
return
LDAP_OTHER
;
rs
->
sr_err
=
LDAP_OTHER
;
goto
done
;
}
if
(
ctxcsn_e
)
{
...
...
@@ -433,5 +429,16 @@ txn_retry:
}
}
return
LDAP_SUCCESS
;
ltid
=
NULL
;
rs
->
sr_err
=
LDAP_SUCCESS
;
done:
if
(
ltid
!=
NULL
)
{
TXN_ABORT
(
ltid
);
}
if
(
ctxcsn_ndn
.
bv_val
!=
NULL
)
ch_free
(
ctxcsn_ndn
.
bv_val
);
return
rs
->
sr_err
;
}
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