return rc;
}
+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;
+}
+
ID
next_id( Backend *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
- pthread_mutex_lock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
+
+#if SLAPD_NEXTID_CHUNK > 1
+ li->li_nextid_wrote = li->li_nextid;
+#endif
}
id = li->li_nextid++;
+
+#if SLAPD_NEXTID_CHUNK > 1
+ if ( li->li_nextid > li->li_nextid_wrote ) {
+ li->li_nextid_wrote += SLAPD_NEXTID_CHUNK;
+ (void) next_id_write( be, li->li_nextid_wrote );
+ }
+#else
(void) next_id_write( be, li->li_nextid );
+#endif
- pthread_mutex_unlock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return( id );
}
void
next_id_return( Backend *be, ID id )
{
-#ifdef NEXT_ID_RETURN
+#ifdef SLAPD_NEXTID_RETURN
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
- pthread_mutex_lock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
if ( id != li->li_nextid - 1 ) {
- pthread_mutex_unlock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return;
}
li->li_nextid--;
+
+#if !( SLAPD_NEXTID_CHUCK > 1 )
(void) next_id_write( be, li->li_nextid );
+#endif
- pthread_mutex_unlock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
#endif
}
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
- pthread_mutex_lock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
if ( li->li_nextid == NOID ) {
li->li_nextid = 1;
}
+
+#if SLAPD_NEXTID_CHUNK > 1
+ li->li_nextid_wrote = li->li_nextid;
+#endif
}
id = li->li_nextid;
- pthread_mutex_unlock( &li->li_nextid_mutex );
+ ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return( id );
}