mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-02 04:59:39 -05:00
ITS#141: move body of next_id_save() into new function next_id_get_save(),
so the (read id, write id) sequence is protected by li_nextid_mutex.
This commit is contained in:
parent
d804c7b137
commit
de810942e1
1 changed files with 20 additions and 9 deletions
|
|
@ -13,6 +13,11 @@
|
|||
#include "slap.h"
|
||||
#include "back-ldbm.h"
|
||||
|
||||
static ID next_id_read( Backend *be );
|
||||
static int next_id_write( Backend *be, ID id );
|
||||
static ID next_id_get_save( Backend *be, int do_save );
|
||||
|
||||
|
||||
static ID
|
||||
next_id_read( Backend *be )
|
||||
{
|
||||
|
|
@ -84,15 +89,7 @@ next_id_write( Backend *be, ID id )
|
|||
int
|
||||
next_id_save( Backend *be )
|
||||
{
|
||||
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
||||
ID id = next_id_get( be );
|
||||
int rc = next_id_write( be, id );
|
||||
|
||||
if (rc == 0) {
|
||||
li->li_nextid_wrote = id;
|
||||
}
|
||||
|
||||
return rc;
|
||||
return( next_id_get_save( be, 1 ) == NOID ? -1 : 0 );
|
||||
}
|
||||
|
||||
ID
|
||||
|
|
@ -156,6 +153,12 @@ next_id_return( Backend *be, ID id )
|
|||
|
||||
ID
|
||||
next_id_get( Backend *be )
|
||||
{
|
||||
return next_id_get_save( be, 0 );
|
||||
}
|
||||
|
||||
static ID
|
||||
next_id_get_save( Backend *be, int do_save )
|
||||
{
|
||||
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
|
||||
ID id;
|
||||
|
|
@ -177,6 +180,14 @@ next_id_get( Backend *be )
|
|||
|
||||
id = li->li_nextid;
|
||||
|
||||
if ( do_save ) {
|
||||
if ( next_id_write( be, id ) == 0 ) {
|
||||
li->li_nextid_wrote = id;
|
||||
} else {
|
||||
id = NOID;
|
||||
}
|
||||
}
|
||||
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
|
||||
|
||||
return( id );
|
||||
|
|
|
|||
Loading…
Reference in a new issue