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
826b1778
Commit
826b1778
authored
Jun 25, 2004
by
Howard Chu
Browse files
More locking cleanup (ITS
#3201
, etc)
parent
22df3f94
Changes
4
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-bdb/cache.c
View file @
826b1778
...
...
@@ -763,6 +763,7 @@ bdb_cache_add(
ei
.
bei_id
=
e
->
e_id
;
ei
.
bei_parent
=
eip
;
ei
.
bei_nrdn
=
*
nrdn
;
ei
.
bei_lockpad
=
0
;
/* Lock this entry so that bdb_add can run to completion.
* It can only fail if BDB has run out of lock resources.
...
...
servers/slapd/back-bdb/delete.c
View file @
826b1778
...
...
@@ -71,6 +71,10 @@ retry: /* transaction retry */
bdb_unlocked_cache_return_entry_w
(
&
bdb
->
bi_cache
,
e
);
e
=
NULL
;
}
if
(
p
!=
NULL
)
{
bdb_unlocked_cache_return_entry_r
(
&
bdb
->
bi_cache
,
p
);
p
=
NULL
;
}
#ifdef NEW_LOGGING
LDAP_LOG
(
OPERATION
,
DETAIL1
,
"==> bdb_delete: retrying...
\n
"
,
0
,
0
,
0
);
...
...
@@ -201,7 +205,17 @@ retry: /* transaction retry */
goto
done
;
}
bdb_cache_find_id
(
op
,
ltid
,
eip
->
bei_id
,
&
eip
,
0
,
locker
,
&
plock
);
rc
=
bdb_cache_find_id
(
op
,
ltid
,
eip
->
bei_id
,
&
eip
,
0
,
locker
,
&
plock
);
if
(
rc
)
{
switch
(
rc
)
{
case
DB_LOCK_DEADLOCK
:
case
DB_LOCK_NOTGRANTED
:
goto
retry
;
}
rs
->
sr_err
=
LDAP_OTHER
;
rs
->
sr_text
=
"internal error"
;
goto
return_results
;
}
if
(
eip
)
p
=
eip
->
bei_e
;
if
(
pdn
.
bv_len
!=
0
)
{
...
...
@@ -223,9 +237,6 @@ retry: /* transaction retry */
rs
->
sr_err
=
access_allowed
(
op
,
p
,
children
,
NULL
,
ACL_WRITE
,
NULL
);
bdb_unlocked_cache_return_entry_r
(
&
bdb
->
bi_cache
,
p
);
p
=
NULL
;
if
(
!
rs
->
sr_err
)
{
switch
(
opinfo
.
boi_err
)
{
case
DB_LOCK_DEADLOCK
:
...
...
@@ -487,8 +498,6 @@ retry: /* transaction retry */
goto
return_results
;
}
bdb_cache_find_id
(
op
,
lt2
,
eip
->
bei_id
,
&
eip
,
0
,
locker
,
&
plock
);
if
(
eip
)
p
=
eip
->
bei_e
;
if
(
pdn
.
bv_len
!=
0
)
{
parent_is_glue
=
is_entry_glue
(
p
);
rs
->
sr_err
=
bdb_cache_children
(
op
,
lt2
,
p
);
...
...
@@ -627,6 +636,9 @@ return_results:
}
done:
if
(
p
)
bdb_unlocked_cache_return_entry_r
(
&
bdb
->
bi_cache
,
p
);
/* free entry */
if
(
e
!=
NULL
)
{
if
(
rs
->
sr_err
==
LDAP_SUCCESS
)
{
...
...
servers/slapd/back-bdb/dn2entry.c
View file @
826b1778
...
...
@@ -38,7 +38,7 @@ bdb_dn2entry(
DB_LOCK
*
lock
)
{
EntryInfo
*
ei
=
NULL
;
int
rc
;
int
rc
,
rc2
;
#ifdef NEW_LOGGING
LDAP_LOG
(
CACHE
,
ARGS
,
"bdb_dn2entry(
\"
%s
\"
)
\n
"
,
dn
->
bv_val
,
0
,
0
);
...
...
@@ -56,10 +56,11 @@ bdb_dn2entry(
* or not.
*/
*
e
=
ei
;
if
(
ei
&&
ei
->
bei_id
)
bdb_cache_find_id
(
op
,
tid
,
ei
->
bei_id
,
if
(
ei
&&
ei
->
bei_id
)
{
rc2
=
bdb_cache_find_id
(
op
,
tid
,
ei
->
bei_id
,
&
ei
,
1
,
locker
,
lock
);
else
if
(
ei
)
if
(
rc2
)
rc
=
rc2
;
}
else
if
(
ei
)
bdb_cache_entryinfo_unlock
(
ei
);
}
else
if
(
ei
)
{
bdb_cache_entryinfo_unlock
(
ei
);
...
...
@@ -72,8 +73,9 @@ bdb_dn2entry(
}
else
if
(
matched
&&
rc
==
DB_NOTFOUND
)
{
/* always return EntryInfo */
ei
=
ei
->
bei_parent
;
bdb_cache_find_id
(
op
,
tid
,
ei
->
bei_id
,
&
ei
,
1
,
rc2
=
bdb_cache_find_id
(
op
,
tid
,
ei
->
bei_id
,
&
ei
,
1
,
locker
,
lock
);
if
(
rc2
)
rc
=
rc2
;
*
e
=
ei
;
}
}
...
...
servers/slapd/back-bdb/modrdn.c
View file @
826b1778
...
...
@@ -947,37 +947,35 @@ retry: /* transaction retry */
goto
return_results
;
}
bdb_cache_find_id
(
op
,
lt2
,
eip
->
bei_id
,
&
eip
,
0
,
locker
,
&
plock
);
if
(
eip
)
p
=
eip
->
bei_e
;
if
(
p_ndn
.
bv_len
!=
0
)
{
parent_is_glue
=
is_entry_glue
(
p
);
rs
->
sr_err
=
bdb_cache_children
(
op
,
lt2
,
p
);
if
(
rs
->
sr_err
!=
DB_NOTFOUND
)
{
switch
(
rs
->
sr_err
)
{
case
DB_LOCK_DEADLOCK
:
case
DB_LOCK_NOTGRANTED
:
goto
retry
;
case
0
:
break
;
default:
if
(
p_ndn
.
bv_len
!=
0
)
{
parent_is_glue
=
is_entry_glue
(
p
);
rs
->
sr_err
=
bdb_cache_children
(
op
,
lt2
,
p
);
if
(
rs
->
sr_err
!=
DB_NOTFOUND
)
{
switch
(
rs
->
sr_err
)
{
case
DB_LOCK_DEADLOCK
:
case
DB_LOCK_NOTGRANTED
:
goto
retry
;
case
0
:
break
;
default:
#ifdef NEW_LOGGING
LDAP_LOG
(
OPERATION
,
ERR
,
"<=- bdb_modrdn: has_children failed %s (%d)
\n
"
,
db_strerror
(
rs
->
sr_err
),
rs
->
sr_err
,
0
);
LDAP_LOG
(
OPERATION
,
ERR
,
"<=- bdb_modrdn: has_children failed %s (%d)
\n
"
,
db_strerror
(
rs
->
sr_err
),
rs
->
sr_err
,
0
);
#else
Debug
(
LDAP_DEBUG_ARGS
,
"<=- bdb_modrdn: has_children failed: %s (%d)
\n
"
,
db_strerror
(
rs
->
sr_err
),
rs
->
sr_err
,
0
);
Debug
(
LDAP_DEBUG_ARGS
,
"<=- bdb_modrdn: has_children failed: %s (%d)
\n
"
,
db_strerror
(
rs
->
sr_err
),
rs
->
sr_err
,
0
);
#endif
rs
->
sr_err
=
LDAP_OTHER
;
rs
->
sr_text
=
"internal error"
;
goto
return_results
;
}
parent_is_leaf
=
1
;
}
bdb_unlocked_cache_return_entry_r
(
&
bdb
->
bi_cache
,
p
);
p
=
NULL
;
}
rs
->
sr_err
=
LDAP_OTHER
;
rs
->
sr_text
=
"internal error"
;
goto
return_results
;
}
parent_is_leaf
=
1
;
}
bdb_unlocked_cache_return_entry_r
(
&
bdb
->
bi_cache
,
p
);
p
=
NULL
;
}
if
(
TXN_COMMIT
(
lt2
,
0
)
!=
0
)
{
rs
->
sr_err
=
LDAP_OTHER
;
...
...
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