1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

opendb: return the path that should be deleted in odb_close_file()

That means the last close returns the path name if the
delete_on_close flag is set.

metze
(This used to be commit fc27730bad24e8dddaa2e7f754a16811e38a2f60)
This commit is contained in:
Stefan Metzmacher 2008-02-27 21:50:51 +01:00
parent 2a209a6a9d
commit 85d58175c8
4 changed files with 30 additions and 6 deletions

View File

@ -409,10 +409,12 @@ static NTSTATUS odb_ctdb_open_file_pending(struct odb_lock *lck, void *private)
/*
remove a opendb entry
*/
static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle)
static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle,
const char **_delete_path)
{
struct odb_context *odb = lck->odb;
struct opendb_file file;
const char *delete_path = NULL;
int i;
NTSTATUS status;
@ -448,6 +450,15 @@ static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle)
file.num_pending = 0;
file.num_entries--;
if (file.num_entries == 0 && file.delete_on_close) {
delete_path = talloc_strdup(lck, file.path);
NT_STATUS_HAVE_NO_MEMORY(delete_path);
}
if (_delete_path) {
*_delete_path = delete_path;
}
return odb_push_record(lck, &file);
}

View File

@ -118,9 +118,10 @@ _PUBLIC_ NTSTATUS odb_open_file_pending(struct odb_lock *lck, void *private)
/*
remove a opendb entry
*/
_PUBLIC_ NTSTATUS odb_close_file(struct odb_lock *lck, void *file_handle)
_PUBLIC_ NTSTATUS odb_close_file(struct odb_lock *lck, void *file_handle,
const char **delete_path)
{
return ops->odb_close_file(lck, file_handle);
return ops->odb_close_file(lck, file_handle, delete_path);
}

View File

@ -32,7 +32,8 @@ struct opendb_ops {
uint32_t open_disposition, bool break_to_none,
uint32_t oplock_level, uint32_t *oplock_granted);
NTSTATUS (*odb_open_file_pending)(struct odb_lock *lck, void *private);
NTSTATUS (*odb_close_file)(struct odb_lock *lck, void *file_handle);
NTSTATUS (*odb_close_file)(struct odb_lock *lck, void *file_handle,
const char **delete_path);
NTSTATUS (*odb_remove_pending)(struct odb_lock *lck, void *private);
NTSTATUS (*odb_rename)(struct odb_lock *lck, const char *path);
NTSTATUS (*odb_set_delete_on_close)(struct odb_lock *lck, bool del_on_close);

View File

@ -527,10 +527,12 @@ static NTSTATUS odb_tdb_open_file_pending(struct odb_lock *lck, void *private)
/*
remove a opendb entry
*/
static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle)
static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle,
const char **_delete_path)
{
struct odb_context *odb = lck->odb;
struct opendb_file file;
const char *delete_path = NULL;
int i;
NTSTATUS status;
@ -566,7 +568,16 @@ static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle)
file.num_pending = 0;
file.num_entries--;
if (file.num_entries == 0 && file.delete_on_close) {
delete_path = talloc_strdup(lck, file.path);
NT_STATUS_HAVE_NO_MEMORY(delete_path);
}
if (_delete_path) {
*_delete_path = delete_path;
}
return odb_push_record(lck, &file);
}