mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
tdb: cleanup: rename GLOBAL_LOCK to OPEN_LOCK.
The word global is overloaded in tdb. The GLOBAL_LOCK offset is used at
open time to serialize initialization (and by the transaction code to block
open).
Rename it to OPEN_LOCK.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from commit 7ab422d6fb
)
(This used to be ctdb commit a4f83910a485cf56f9b3df1dcf2ad36ebec57473)
This commit is contained in:
parent
db7a4fedc9
commit
6fec65ac2c
@ -241,8 +241,8 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
|
||||
fcntl(tdb->fd, F_SETFD, v | FD_CLOEXEC);
|
||||
|
||||
/* ensure there is only one process initialising at once */
|
||||
if (tdb->methods->brlock(tdb, F_WRLCK, GLOBAL_LOCK, 1, TDB_LOCK_WAIT) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_open_ex: failed to get global lock on %s: %s\n",
|
||||
if (tdb->methods->brlock(tdb, F_WRLCK, OPEN_LOCK, 1, TDB_LOCK_WAIT) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_open_ex: failed to get open lock on %s: %s\n",
|
||||
name, strerror(errno)));
|
||||
goto fail; /* errno set by tdb_brlock */
|
||||
}
|
||||
@ -356,8 +356,8 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
|
||||
internal:
|
||||
/* Internal (memory-only) databases skip all the code above to
|
||||
* do with disk files, and resume here by releasing their
|
||||
* global lock and hooking into the active list. */
|
||||
if (tdb->methods->brunlock(tdb, F_WRLCK, GLOBAL_LOCK, 1) == -1)
|
||||
* open lock and hooking into the active list. */
|
||||
if (tdb->methods->brunlock(tdb, F_WRLCK, OPEN_LOCK, 1) == -1)
|
||||
goto fail;
|
||||
tdb->next = tdbs;
|
||||
tdbs = tdb;
|
||||
|
@ -102,7 +102,7 @@ void tdb_trace_2rec_retrec(struct tdb_context *tdb, const char *op,
|
||||
#endif /* !TDB_TRACE */
|
||||
|
||||
/* lock offsets */
|
||||
#define GLOBAL_LOCK 0
|
||||
#define OPEN_LOCK 0
|
||||
#define ACTIVE_LOCK 4
|
||||
#define TRANSACTION_LOCK 8
|
||||
|
||||
|
@ -76,7 +76,7 @@
|
||||
to reduce this to 3 or even 2 with some more work.
|
||||
|
||||
- check for a valid recovery record on open of the tdb, while the
|
||||
global lock is held. Automatically recover from the transaction
|
||||
open lock is held. Automatically recover from the transaction
|
||||
recovery area if needed, then continue with the open as
|
||||
usual. This allows for smooth crash recovery with no administrator
|
||||
intervention.
|
||||
@ -135,8 +135,8 @@ struct tdb_transaction {
|
||||
bool prepared;
|
||||
tdb_off_t magic_offset;
|
||||
|
||||
/* set when the GLOBAL_LOCK has been taken */
|
||||
bool global_lock_taken;
|
||||
/* set when the OPEN_LOCK has been taken */
|
||||
bool open_lock_taken;
|
||||
|
||||
/* old file size before transaction */
|
||||
tdb_len_t old_map_size;
|
||||
@ -615,9 +615,9 @@ static int _tdb_transaction_cancel(struct tdb_context *tdb, int ltype)
|
||||
}
|
||||
}
|
||||
|
||||
if (tdb->transaction->global_lock_taken) {
|
||||
tdb_brunlock(tdb, F_WRLCK, GLOBAL_LOCK, 1);
|
||||
tdb->transaction->global_lock_taken = false;
|
||||
if (tdb->transaction->open_lock_taken) {
|
||||
tdb_brunlock(tdb, F_WRLCK, OPEN_LOCK, 1);
|
||||
tdb->transaction->open_lock_taken = false;
|
||||
}
|
||||
|
||||
/* remove any global lock created during the transaction */
|
||||
@ -965,16 +965,16 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* get the global lock - this prevents new users attaching to the database
|
||||
/* get the open lock - this prevents new users attaching to the database
|
||||
during the commit */
|
||||
if (tdb_brlock(tdb, F_WRLCK, GLOBAL_LOCK, 1, TDB_LOCK_WAIT) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_transaction_prepare_commit: failed to get global lock\n"));
|
||||
if (tdb_brlock(tdb, F_WRLCK, OPEN_LOCK, 1, TDB_LOCK_WAIT) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_transaction_prepare_commit: failed to get open lock\n"));
|
||||
tdb->ecode = TDB_ERR_LOCK;
|
||||
_tdb_transaction_cancel(tdb, F_WRLCK);
|
||||
return -1;
|
||||
}
|
||||
|
||||
tdb->transaction->global_lock_taken = true;
|
||||
tdb->transaction->open_lock_taken = true;
|
||||
|
||||
if (!(tdb->flags & TDB_NOSYNC)) {
|
||||
/* write the recovery data to the end of the file */
|
||||
@ -1001,7 +1001,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
|
||||
methods->tdb_oob(tdb, tdb->map_size + 1, 1);
|
||||
}
|
||||
|
||||
/* Keep the global lock until the actual commit */
|
||||
/* Keep the open lock until the actual commit */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1129,7 +1129,7 @@ int tdb_transaction_commit(struct tdb_context *tdb)
|
||||
|
||||
/*
|
||||
recover from an aborted transaction. Must be called with exclusive
|
||||
database write access already established (including the global
|
||||
database write access already established (including the open
|
||||
lock to prevent new processes attaching)
|
||||
*/
|
||||
int tdb_transaction_recover(struct tdb_context *tdb)
|
||||
|
Loading…
Reference in New Issue
Block a user