diff options
author | Volker Lendecke <vl@samba.org> | 2014-09-24 20:46:15 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-10-31 03:47:40 +0100 |
commit | 9010bbeb00264f4476c3be7d2e8c8420c695cfbb (patch) | |
tree | c03448a0c323c99a1d5f55106a7bd5372929ea57 /source3/locking | |
parent | 48926b761975a7d9cb6daf30d64d6a4f0a34f38a (diff) | |
download | samba-9010bbeb00264f4476c3be7d2e8c8420c695cfbb.tar.gz samba-9010bbeb00264f4476c3be7d2e8c8420c695cfbb.tar.xz samba-9010bbeb00264f4476c3be7d2e8c8420c695cfbb.zip |
s3:locking: allow early return for share_entry_forall()
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/locking')
-rw-r--r-- | source3/locking/proto.h | 4 | ||||
-rw-r--r-- | source3/locking/share_mode_lock.c | 23 |
2 files changed, 16 insertions, 11 deletions
diff --git a/source3/locking/proto.h b/source3/locking/proto.h index a5c46c8140..44f3ba13e0 100644 --- a/source3/locking/proto.h +++ b/source3/locking/proto.h @@ -194,8 +194,8 @@ int share_mode_forall(int (*fn)(struct file_id fid, const struct share_mode_data *data, void *private_data), void *private_data); -int share_entry_forall(void (*fn)(const struct share_mode_entry *, const char *, - const char *, void *), +int share_entry_forall(int (*fn)(const struct share_mode_entry *, const char *, + const char *, void *), void *private_data); bool share_mode_cleanup_disconnected(struct file_id id, uint64_t open_persistent_id); diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c index c2f34022ae..da16d1acf0 100644 --- a/source3/locking/share_mode_lock.c +++ b/source3/locking/share_mode_lock.c @@ -522,9 +522,9 @@ int share_mode_forall(int (*fn)(struct file_id fid, } struct share_entry_forall_state { - void (*fn)(const struct share_mode_entry *e, - const char *service_path, const char *base_name, - void *private_data); + int (*fn)(const struct share_mode_entry *e, + const char *service_path, const char *base_name, + void *private_data); void *private_data; }; @@ -536,9 +536,14 @@ static int share_entry_traverse_fn(struct file_id fid, uint32_t i; for (i=0; i<data->num_share_modes; i++) { - state->fn(&data->share_modes[i], - data->servicepath, data->base_name, - state->private_data); + int ret; + + ret = state->fn(&data->share_modes[i], + data->servicepath, data->base_name, + state->private_data); + if (ret != 0) { + return ret; + } } return 0; @@ -549,9 +554,9 @@ static int share_entry_traverse_fn(struct file_id fid, share mode system. ********************************************************************/ -int share_entry_forall(void (*fn)(const struct share_mode_entry *, - const char *, const char *, void *), - void *private_data) +int share_entry_forall(int (*fn)(const struct share_mode_entry *, + const char *, const char *, void *), + void *private_data) { struct share_entry_forall_state state = { .fn = fn, .private_data = private_data }; |