Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
OpenLDAP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dragoș Haiduc
OpenLDAP
Commits
f0754533
Commit
f0754533
authored
23 years ago
by
Kurt Zeilenga
Browse files
Options
Downloads
Patches
Plain Diff
Import DB_THREAD r/w lock code from HEAD
parent
c3f8eff8
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/libldbm/ldbm.c
+129
-162
129 additions, 162 deletions
libraries/libldbm/ldbm.c
with
129 additions
and
162 deletions
libraries/libldbm/ldbm.c
+
129
−
162
View file @
f0754533
...
...
@@ -6,7 +6,6 @@
*/
/* Patched for Berkeley DB version 2.0; /KSp; 98/02/23
*
* - DB version 2.6.4b ; 1998/12/28, /KSp
* - DB_DBT_MALLOC ; 1998/03/22, /KSp
* - basic implementation; 1998/02/23, /KSp
...
...
@@ -59,14 +58,32 @@ ldbm_datum_dup( LDBM ldbm, Datum data )
static
int
ldbm_initialized
=
0
;
#ifdef USE_BERKELEY_CDB
#if
def
ined(
USE_BERKELEY_CDB
)
/* not currently supported */
#define LDBM_LOCK ((void) 0)
#define LDBM_UNLOCK ((void) 0)
#define LDBM_RWLOCK_INIT ((void) 0)
#define LDBM_RWLOCK_DESTROY ((void) 0)
#define LDBM_WLOCK ((void) 0)
#define LDBM_WUNLOCK ((void) 0)
#define LDBM_RLOCK ((void) 0)
#define LDBM_RUNLOCK ((void) 0)
#elif defined( HAVE_BERKELEY_DB_THREAD )
static
ldap_pvt_thread_rdwr_t
ldbm_big_rdwr
;
#define LDBM_RWLOCK_INIT (ldap_pvt_thread_rdwr_init( &ldbm_big_rdwr ))
#define LDBM_RWLOCK_DESTROY (ldap_pvt_thread_rdwr_destroy( &ldbm_big_rdwr ))
#define LDBM_WLOCK (ldap_pvt_thread_rdwr_wlock(&ldbm_big_rdwr))
#define LDBM_WUNLOCK (ldap_pvt_thread_rdwr_wunlock(&ldbm_big_rdwr))
#define LDBM_RLOCK (ldap_pvt_thread_rdwr_rlock(&ldbm_big_rdwr))
#define LDBM_RUNLOCK (ldap_pvt_thread_rdwr_runlock(&ldbm_big_rdwr))
#else
static
ldap_pvt_thread_mutex_t
ldbm_big_mutex
;
#define LDBM_LOCK (ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
#define LDBM_UNLOCK (ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
#define LDBM_RWLOCK_INIT (ldap_pvt_thread_mutex_init( &ldbm_big_mutex ))
#define LDBM_RWLOCK_DESTROY (ldap_pvt_thread_mutex_destroy( &ldbm_big_mutex ))
#define LDBM_WLOCK (ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
#define LDBM_WUNLOCK (ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
#define LDBM_RLOCK LDBM_WLOCK
#define LDBM_RUNLOCK LDBM_WUNLOCK
#endif
#if !defined( HAVE_BERKELEY_DB ) || (DB_VERSION_MAJOR < 3)
...
...
@@ -74,7 +91,6 @@ static ldap_pvt_thread_mutex_t ldbm_big_mutex;
DB_ENV
*
ldbm_Env
=
NULL
;
/* real or fake, depending on db and version */
#endif
/*******************************************************************
* *
* Create some special functions to initialize Berkeley DB for *
...
...
@@ -126,11 +142,6 @@ int ldbm_initialize( const char* home )
}
}
#ifndef USE_BERKELEY_CDB
ldap_pvt_thread_mutex_init
(
&
ldbm_big_mutex
);
#endif
#if DB_VERSION_MAJOR < 3
ldbm_Env
=
calloc
(
1
,
sizeof
(
DB_ENV
));
...
...
@@ -161,6 +172,8 @@ int ldbm_initialize( const char* home )
}
#endif
LDBM_RWLOCK_INIT
;
return
0
;
}
...
...
@@ -172,9 +185,7 @@ int ldbm_shutdown( void )
db_appexit
(
ldbm_Env
);
#endif
#ifndef USE_BERKELEY_CDB
ldap_pvt_thread_mutex_destroy
(
&
ldbm_big_mutex
);
#endif
LDBM_RWLOCK_DESTROY
;
return
0
;
}
...
...
@@ -184,7 +195,7 @@ int ldbm_initialize( const char * home )
{
if
(
ldbm_initialized
++
)
return
1
;
ldap_pvt_thread_mutex_init
(
&
ldbm_big_mutex
)
;
LDBM_RWLOCK_INIT
;
return
0
;
}
...
...
@@ -193,14 +204,13 @@ int ldbm_shutdown( void )
{
if
(
!
ldbm_initialized
)
return
1
;
ldap_pvt_thread_mutex_destroy
(
&
ldbm_big_mutex
)
;
LDBM_RWLOCK_DESTROY
;
return
0
;
}
#endif
/* HAVE_BERKELEY_DB */
#if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 3)
DB_ENV
*
ldbm_initialize_env
(
const
char
*
home
,
int
dbcachesize
,
int
*
envdirok
)
...
...
@@ -263,7 +273,6 @@ void ldbm_shutdown_env(DB_ENV *env)
env
->
close
(
env
,
0
);
}
#else
DB_ENV
*
ldbm_initialize_env
(
const
char
*
home
,
int
dbcachesize
,
int
*
envdirok
)
...
...
@@ -277,7 +286,6 @@ void ldbm_shutdown_env(DB_ENV *env)
#endif
#if defined( LDBM_USE_DBHASH ) || defined( LDBM_USE_DBBTREE )
/*****************************************************************
...
...
@@ -294,12 +302,12 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
#if DB_VERSION_MAJOR >= 3
int
err
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
err
=
db_create
(
&
ret
,
env
,
0
);
if
(
err
!=
0
)
{
(
void
)
ret
->
close
(
ret
,
0
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
NULL
;
}
...
...
@@ -313,8 +321,6 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
ret
->
set_malloc
(
ret
,
ldbm_malloc
);
#endif
/* ret->set_cachesize( ret, 0, dbcachesize, 0 ); */
err
=
ret
->
open
(
ret
,
name
,
NULL
,
DB_TYPE
,
rw
,
mode
);
if
(
err
!=
0
)
{
...
...
@@ -322,11 +328,11 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
(
void
)
ret
->
close
(
ret
,
0
);
errno
=
tmp
;
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
NULL
;
}
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
#elif DB_VERSION_MAJOR >= 2
DB_INFO
dbinfo
;
...
...
@@ -348,9 +354,9 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
dbinfo
.
db_pagesize
=
DEFAULT_DB_PAGE_SIZE
;
dbinfo
.
db_malloc
=
ldbm_malloc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
(
void
)
db_open
(
name
,
DB_TYPE
,
rw
,
mode
,
ldbm_Env
,
&
dbinfo
,
&
ret
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
#else
void
*
info
;
...
...
@@ -369,9 +375,9 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
info
=
NULL
;
}
LDBM_LOCK
;
LDBM_
W
LOCK
;
ret
=
dbopen
(
name
,
rw
,
mode
,
DB_TYPE
,
info
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
#endif
return
ret
;
...
...
@@ -380,7 +386,7 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
void
ldbm_close
(
LDBM
ldbm
)
{
LDBM_LOCK
;
LDBM_
W
LOCK
;
#if DB_VERSION_MAJOR >= 3
ldbm
->
close
(
ldbm
,
0
);
#elif DB_VERSION_MAJOR >= 2
...
...
@@ -388,15 +394,15 @@ ldbm_close( LDBM ldbm )
#else
(
*
ldbm
->
close
)(
ldbm
);
#endif
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
void
ldbm_sync
(
LDBM
ldbm
)
{
LDBM_LOCK
;
LDBM_
W
LOCK
;
(
*
ldbm
->
sync
)(
ldbm
,
0
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
Datum
...
...
@@ -405,7 +411,7 @@ ldbm_fetch( LDBM ldbm, Datum key )
Datum
data
;
int
rc
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
#if DB_VERSION_MAJOR >= 3
ldbm_datum_init
(
data
);
...
...
@@ -440,7 +446,7 @@ ldbm_fetch( LDBM ldbm, Datum key )
}
#endif
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
return
(
data
);
}
...
...
@@ -450,7 +456,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
#if DB_VERSION_MAJOR >= 3
rc
=
ldbm
->
put
(
ldbm
,
NULL
,
&
key
,
&
data
,
flags
&
~
LDBM_SYNC
);
...
...
@@ -466,7 +472,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
if
(
flags
&
LDBM_SYNC
)
(
*
ldbm
->
sync
)(
ldbm
,
0
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
rc
);
}
...
...
@@ -476,7 +482,7 @@ ldbm_delete( LDBM ldbm, Datum key )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
#if DB_VERSION_MAJOR >= 3
rc
=
ldbm
->
del
(
ldbm
,
NULL
,
&
key
,
0
);
...
...
@@ -489,7 +495,7 @@ ldbm_delete( LDBM ldbm, Datum key )
#endif
(
*
ldbm
->
sync
)(
ldbm
,
0
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
rc
);
}
...
...
@@ -498,6 +504,7 @@ Datum
ldbm_firstkey
(
LDBM
ldbm
,
LDBMCursor
**
dbch
)
{
Datum
key
,
data
;
int
rc
;
#if DB_VERSION_MAJOR >= 2
LDBMCursor
*
dbci
;
...
...
@@ -507,85 +514,81 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
key
.
flags
=
data
.
flags
=
DB_DBT_MALLOC
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
/* acquire a cursor for the DB */
# if DB_VERSION_MAJOR >= 3
if
(
ldbm
->
cursor
(
ldbm
,
NULL
,
&
dbci
,
0
)
)
rc
=
ldbm
->
cursor
(
ldbm
,
NULL
,
&
dbci
,
0
)
;
# elif defined( DB_VERSION_MAJOR ) && defined( DB_VERSION_MINOR ) && \
(DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6)
rc
=
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
);
# else
rc
=
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
,
0
);
# endif
if
(
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
))
# else
if
(
(
*
ldbm
->
cursor
)(
ldbm
,
NULL
,
&
dbci
,
0
))
# endif
{
if
(
rc
)
{
key
.
dptr
=
NULL
;
LDBM_UNLOCK
;
return
(
key
);
}
else
{
*
dbch
=
dbci
;
if
(
(
*
dbci
->
c_get
)(
dbci
,
&
key
,
&
data
,
DB_NEXT
)
==
0
)
{
ldbm_datum_free
(
ldbm
,
data
);
}
else
{
key
.
dptr
=
NULL
;
key
.
dsize
=
0
;
}
else
{
}
LDBM_RUNLOCK
;
#else
int
rc
;
LDBM_RLOCK
;
LDBM_LOCK
;
rc
=
(
*
ldbm
->
seq
)(
ldbm
,
&
key
,
&
data
,
R_FIRST
)
;
if
(
(
rc
=
(
*
ldbm
->
seq
)(
ldbm
,
&
key
,
&
data
,
R_FIRST
))
==
0
)
{
if
(
rc
==
0
)
{
key
=
ldbm_datum_dup
(
ldbm
,
key
);
}
else
{
#endif
}
else
{
key
.
dptr
=
NULL
;
key
.
dsize
=
0
;
}
#if DB_VERSION_MAJOR >= 2
}
LDBM_RUNLOCK
;
#endif
LDBM_UNLOCK
;
return
(
key
);
}
Datum
ldbm_nextkey
(
LDBM
ldbm
,
Datum
key
,
LDBMCursor
*
dbcp
)
{
int
rc
;
Datum
data
;
LDBM_RLOCK
;
#if DB_VERSION_MAJOR >= 2
ldbm_datum_init
(
data
);
ldbm_datum_free
(
ldbm
,
key
);
key
.
flags
=
data
.
flags
=
DB_DBT_MALLOC
;
LDBM_LOCK
;
if
(
(
*
dbcp
->
c_get
)(
dbcp
,
&
key
,
&
data
,
DB_NEXT
)
==
0
)
{
rc
=
(
*
dbcp
->
c_get
)(
dbcp
,
&
key
,
&
data
,
DB_NEXT
);
if
(
rc
==
0
)
{
ldbm_datum_free
(
ldbm
,
data
);
}
else
{
}
else
#else
int
rc
;
rc
=
(
*
ldbm
->
seq
)(
ldbm
,
&
key
,
&
data
,
R_NEXT
)
;
LDBM_LOCK
;
if
(
(
rc
=
(
*
ldbm
->
seq
)(
ldbm
,
&
key
,
&
data
,
R_NEXT
))
==
0
)
{
if
(
rc
==
0
)
{
key
=
ldbm_datum_dup
(
ldbm
,
key
);
}
else
{
}
else
#endif
{
key
.
dptr
=
NULL
;
key
.
dsize
=
0
;
}
LDBM_UNLOCK
;
LDBM_RUNLOCK
;
return
(
key
);
}
...
...
@@ -621,10 +624,10 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
struct
stat
st
;
#endif
LDBM_LOCK
;
LDBM_
W
LOCK
;
if
(
(
db
=
gdbm_open
(
name
,
0
,
rw
|
GDBM_FAST
,
mode
,
0
))
==
NULL
)
{
LDBM_UNLOCK
;
if
(
(
db
=
gdbm_open
(
name
,
0
,
rw
|
GDBM_FAST
,
mode
,
0
))
==
NULL
)
{
LDBM_
W
UNLOCK
;
return
(
NULL
);
}
...
...
@@ -642,7 +645,7 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
}
#endif
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
db
);
}
...
...
@@ -650,17 +653,17 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
void
ldbm_close
(
LDBM
ldbm
)
{
LDBM_LOCK
;
LDBM_
W
LOCK
;
gdbm_close
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
void
ldbm_sync
(
LDBM
ldbm
)
{
LDBM_LOCK
;
LDBM_
W
LOCK
;
gdbm_sync
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
Datum
...
...
@@ -668,9 +671,9 @@ ldbm_fetch( LDBM ldbm, Datum key )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
gdbm_fetch
(
ldbm
,
key
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
return
d
;
}
...
...
@@ -680,11 +683,11 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
rc
=
gdbm_store
(
ldbm
,
key
,
data
,
flags
&
~
LDBM_SYNC
);
if
(
flags
&
LDBM_SYNC
)
gdbm_sync
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
rc
);
}
...
...
@@ -694,10 +697,10 @@ ldbm_delete( LDBM ldbm, Datum key )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
rc
=
gdbm_delete
(
ldbm
,
key
);
gdbm_sync
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
rc
);
}
...
...
@@ -707,9 +710,9 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
gdbm_firstkey
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
if
(
d
.
dptr
!=
NULL
)
{
*
dbcp
=
(
Datum
*
)
malloc
(
sizeof
(
Datum
)
);
...
...
@@ -724,9 +727,9 @@ ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
gdbm_nextkey
(
ldbm
,
*
dbcp
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
ldbm_datum_free
(
ldbm
,
*
dbcp
);
...
...
@@ -744,9 +747,9 @@ ldbm_errno( LDBM ldbm )
{
int
err
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
err
=
gdbm_errno
;
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
err
);
}
...
...
@@ -770,7 +773,6 @@ ldbm_errno( LDBM ldbm )
/* Use chaining */
#define mdbm_store mdbm_chain_store
#define mdbm_fetch mdbm_chain_fetch
#define mdbm_delete mdbm_chain_delete
...
...
@@ -799,26 +801,23 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
fflush
(
stdout
);
#endif
LDBM_LOCK
;
/* We need locking here, this is the only non-thread
* safe function we have.
*/
LDBM_WLOCK
;
/* We need locking here, this is the only non-thread
* safe function we have. */
if
(
(
db
=
mdbm_open
(
name
,
rw
,
mode
,
MDBM_PG_SZ
))
==
NULL
)
{
LDBM_UNLOCK
;
LDBM_WUNLOCK
;
#ifdef MDBM_DEBUG
fprintf
(
stdout
,
"<==(mdbm)ldbm_open(db=NULL)
\n
"
);
fflush
(
stdout
);
#endif
return
(
NULL
);
}
#ifdef MDBM_CHAIN
(
void
)
mdbm_set_chain
(
db
);
#endif
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
#ifdef MDBM_DEBUG
fprintf
(
stdout
,
"<==(mdbm)ldbm_open(db=%p)
\n
"
,
db
);
...
...
@@ -826,16 +825,11 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
#endif
return
(
db
);
}
void
ldbm_close
(
LDBM
ldbm
)
{
/* Open and close are not reentrant so we need to use locks here */
#ifdef MDBM_DEBUG
...
...
@@ -844,20 +838,16 @@ ldbm_close( LDBM ldbm )
fflush
(
stdout
);
#endif
LDBM_LOCK
;
LDBM_
W
LOCK
;
mdbm_close
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
#ifdef MDBM_DEBUG
fprintf
(
stdout
,
"<==(mdbm)ldbm_close()
\n
"
);
fflush
(
stdout
);
#endif
}
void
ldbm_sync
(
LDBM
ldbm
)
{
...
...
@@ -865,12 +855,11 @@ ldbm_sync( LDBM ldbm )
* you can leave LOCKS out.
*/
LDBM_LOCK
;
LDBM_
W
LOCK
;
mdbm_sync
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
#define MAX_MDBM_RETRY 5
Datum
...
...
@@ -885,8 +874,6 @@ ldbm_fetch( LDBM ldbm, Datum key )
* mode.
*/
/* LDBM_LOCK; */
#ifdef NO_NULL_KEY
k
.
key
.
dsize
=
key
.
dsize
+
1
;
k
.
key
.
dptr
=
malloc
(
k
.
key
.
dsize
);
...
...
@@ -899,45 +886,34 @@ ldbm_fetch( LDBM ldbm, Datum key )
k
.
val
.
dptr
=
NULL
;
k
.
val
.
dsize
=
0
;
/* LDBM_RLOCK; */
do
{
d
=
mdbm_fetch
(
ldbm
,
k
);
if
(
d
.
dsize
>
0
)
{
if
(
k
.
val
.
dptr
!=
NULL
)
{
free
(
k
.
val
.
dptr
);
}
if
(
(
k
.
val
.
dptr
=
malloc
(
d
.
dsize
))
!=
NULL
)
{
k
.
val
.
dsize
=
d
.
dsize
;
d
=
mdbm_fetch
(
ldbm
,
k
);
}
else
{
d
.
dsize
=
0
;
break
;
}
}
/* if ( d.dsize > 0 ) */
}
while
((
d
.
dsize
>
k
.
val
.
dsize
)
&&
(
++
retry
<
MAX_MDBM_RETRY
));
/* LDBM_UNLOCK; */
/* LDBM_RUNLOCK; */
#ifdef NO_NULL_KEY
free
(
k
.
key
.
dptr
);
#endif
return
d
;
}
int
ldbm_store
(
LDBM
ldbm
,
Datum
key
,
Datum
data
,
int
flags
)
{
...
...
@@ -951,7 +927,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
fflush
(
stdout
);
#endif
/* LDBM_LOCK; */
/* LDBM_
W
LOCK; */
#ifdef NO_NULL_KEY
int_key
.
dsize
=
key
.
dsize
+
1
;
...
...
@@ -967,7 +943,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
mdbm_sync
(
ldbm
);
}
/* LDBM_UNLOCK; */
/* LDBM_
W
UNLOCK; */
#ifdef MDBM_DEBUG
fprintf
(
stdout
,
"<==(mdbm)ldbm_store(rc=%d)
\n
"
,
rc
);
...
...
@@ -979,18 +955,15 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
#endif
return
(
rc
);
}
int
ldbm_delete
(
LDBM
ldbm
,
Datum
key
)
{
int
rc
;
Datum
int_key
;
/* LDBM_LOCK; */
/* LDBM_
W
LOCK; */
#ifdef NO_NULL_KEY
int_key
.
dsize
=
key
.
dsize
+
1
;
...
...
@@ -1003,7 +976,7 @@ ldbm_delete( LDBM ldbm, Datum key )
rc
=
mdbm_delete
(
ldbm
,
int_key
);
/* LDBM_UNLOCK; */
/* LDBM_
W
UNLOCK; */
#ifdef NO_NULL_KEY
free
(
int_key
.
dptr
);
#endif
...
...
@@ -1011,9 +984,6 @@ ldbm_delete( LDBM ldbm, Datum key )
return
(
rc
);
}
static
Datum
ldbm_get_next
(
LDBM
ldbm
,
kvpair
(
*
fptr
)(
MDBM
*
,
kvpair
)
)
{
...
...
@@ -1027,7 +997,7 @@ ldbm_get_next( LDBM ldbm, kvpair (*fptr)(MDBM *, kvpair) )
int
delta
=
0
;
#endif
/* LDBM_LOCK; */
/* LDBM_
R
LOCK; */
in
.
key
.
dsize
=
sz
;
/* Assume first key in one pg */
in
.
key
.
dptr
=
malloc
(
sz
);
...
...
@@ -1053,7 +1023,7 @@ ldbm_get_next( LDBM ldbm, kvpair (*fptr)(MDBM *, kvpair) )
}
}
/* LDBM_UNLOCK; */
/* LDBM_
R
UNLOCK; */
free
(
in
.
key
.
dptr
);
return
ret
;
...
...
@@ -1083,9 +1053,6 @@ ldbm_errno( LDBM ldbm )
return
(
errno
);
}
#elif defined( HAVE_NDBM )
/*****************************************************************
...
...
@@ -1100,9 +1067,9 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
{
LDBM
ldbm
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
ldbm
=
dbm_open
(
name
,
rw
,
mode
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
(
ldbm
);
}
...
...
@@ -1110,9 +1077,9 @@ ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize )
void
ldbm_close
(
LDBM
ldbm
)
{
LDBM_LOCK
;
LDBM_
W
LOCK
;
dbm_close
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
}
/* ARGSUSED */
...
...
@@ -1127,9 +1094,9 @@ ldbm_fetch( LDBM ldbm, Datum key )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
ldbm_datum_dup
(
ldbm
,
dbm_fetch
(
ldbm
,
key
)
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
return
d
;
}
...
...
@@ -1139,9 +1106,9 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
rc
=
dbm_store
(
ldbm
,
key
,
data
,
flags
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
rc
;
}
...
...
@@ -1151,9 +1118,9 @@ ldbm_delete( LDBM ldbm, Datum key )
{
int
rc
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
rc
=
dbm_delete
(
ldbm
,
key
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
rc
;
}
...
...
@@ -1163,9 +1130,9 @@ ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
dbm_firstkey
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
return
d
;
}
...
...
@@ -1175,9 +1142,9 @@ ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
{
Datum
d
;
LDBM_LOCK
;
LDBM_
R
LOCK
;
d
=
dbm_nextkey
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
R
UNLOCK
;
return
d
;
}
...
...
@@ -1187,9 +1154,9 @@ ldbm_errno( LDBM ldbm )
{
int
err
;
LDBM_LOCK
;
LDBM_
W
LOCK
;
err
=
dbm_error
(
ldbm
);
LDBM_UNLOCK
;
LDBM_
W
UNLOCK
;
return
err
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment