From: Timo Sirainen Date: Mon, 13 Jun 2016 14:11:28 +0000 (+0300) Subject: lib-fs: Added fs_switch_ioloop() X-Git-Tag: 2.2.25.rc1~150 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e55f1ea2fd9610c500178bf6d5401bf88648818;p=thirdparty%2Fdovecot%2Fcore.git lib-fs: Added fs_switch_ioloop() --- diff --git a/src/lib-fs/fs-api-private.h b/src/lib-fs/fs-api-private.h index 4b480adb36..fa5168b575 100644 --- a/src/lib-fs/fs-api-private.h +++ b/src/lib-fs/fs-api-private.h @@ -66,6 +66,8 @@ struct fs_vfuncs { enum fs_iter_flags flags); const char *(*iter_next)(struct fs_iter *iter); int (*iter_deinit)(struct fs_iter *iter); + + bool (*switch_ioloop)(struct fs *fs); }; struct fs { diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c index 024cec4ad6..dc892d2014 100644 --- a/src/lib-fs/fs-api.c +++ b/src/lib-fs/fs-api.c @@ -737,6 +737,20 @@ int fs_wait_async(struct fs *fs) return ret; } +bool fs_switch_ioloop(struct fs *fs) +{ + bool ret = FALSE; + + if (fs->v.switch_ioloop != NULL) { + T_BEGIN { + ret = fs->v.switch_ioloop(fs); + } T_END; + } else if (fs->parent != NULL) { + ret = fs_switch_ioloop(fs->parent); + } + return ret; +} + int fs_lock(struct fs_file *file, unsigned int secs, struct fs_lock **lock_r) { int ret; diff --git a/src/lib-fs/fs-api.h b/src/lib-fs/fs-api.h index d5702533f8..2f8da389cc 100644 --- a/src/lib-fs/fs-api.h +++ b/src/lib-fs/fs-api.h @@ -288,6 +288,10 @@ void fs_file_set_async_callback(struct fs_file *file, It's an error to call this when there are no pending async operations. Returns 0 if ok, -1 if timed out. */ int fs_wait_async(struct fs *fs); +/* Switch the fs to the current ioloop. This can be used to do fs_wait_async() + among other IO work. Returns TRUE if there is actually some work that can + be waited on. */ +bool fs_switch_ioloop(struct fs *fs) ATTR_NOWARN_UNUSED_RESULT; /* Returns 1 if file exists, 0 if not, -1 if error occurred. */ int fs_exists(struct fs_file *file); diff --git a/src/lib-fs/fs-dict.c b/src/lib-fs/fs-dict.c index 2704950298..5efd33abb6 100644 --- a/src/lib-fs/fs-dict.c +++ b/src/lib-fs/fs-dict.c @@ -318,6 +318,7 @@ const struct fs fs_class_dict = { fs_dict_delete, fs_dict_iter_init, fs_dict_iter_next, - fs_dict_iter_deinit + fs_dict_iter_deinit, + NULL } }; diff --git a/src/lib-fs/fs-metawrap.c b/src/lib-fs/fs-metawrap.c index c4887d75c2..85b2f059a0 100644 --- a/src/lib-fs/fs-metawrap.c +++ b/src/lib-fs/fs-metawrap.c @@ -613,6 +613,7 @@ const struct fs fs_class_metawrap = { fs_metawrap_delete, fs_metawrap_iter_init, fs_metawrap_iter_next, - fs_metawrap_iter_deinit + fs_metawrap_iter_deinit, + NULL } }; diff --git a/src/lib-fs/fs-posix.c b/src/lib-fs/fs-posix.c index ddd9ccb687..de9f43ead7 100644 --- a/src/lib-fs/fs-posix.c +++ b/src/lib-fs/fs-posix.c @@ -873,6 +873,7 @@ const struct fs fs_class_posix = { fs_posix_delete, fs_posix_iter_init, fs_posix_iter_next, - fs_posix_iter_deinit + fs_posix_iter_deinit, + NULL } }; diff --git a/src/lib-fs/fs-randomfail.c b/src/lib-fs/fs-randomfail.c index 3a397dec99..ff4e80f76e 100644 --- a/src/lib-fs/fs-randomfail.c +++ b/src/lib-fs/fs-randomfail.c @@ -567,6 +567,7 @@ const struct fs fs_class_randomfail = { fs_randomfail_delete, fs_randomfail_iter_init, fs_randomfail_iter_next, - fs_randomfail_iter_deinit + fs_randomfail_iter_deinit, + NULL } }; diff --git a/src/lib-fs/fs-sis-queue.c b/src/lib-fs/fs-sis-queue.c index fe970d8470..eaefb50e0b 100644 --- a/src/lib-fs/fs-sis-queue.c +++ b/src/lib-fs/fs-sis-queue.c @@ -376,6 +376,7 @@ const struct fs fs_class_sis_queue = { fs_sis_queue_delete, fs_sis_queue_iter_init, NULL, + NULL, NULL } }; diff --git a/src/lib-fs/fs-sis.c b/src/lib-fs/fs-sis.c index 8c705f171c..98ccf96b16 100644 --- a/src/lib-fs/fs-sis.c +++ b/src/lib-fs/fs-sis.c @@ -513,6 +513,7 @@ const struct fs fs_class_sis = { fs_sis_delete, fs_sis_iter_init, NULL, + NULL, NULL } }; diff --git a/src/lib-fs/fs-test.c b/src/lib-fs/fs-test.c index e0627797df..b3c53a65f9 100644 --- a/src/lib-fs/fs-test.c +++ b/src/lib-fs/fs-test.c @@ -417,6 +417,7 @@ const struct fs fs_class_test = { fs_test_delete, fs_test_iter_init, fs_test_iter_next, - fs_test_iter_deinit + fs_test_iter_deinit, + NULL } }; diff --git a/src/plugins/fs-compress/fs-compress.c b/src/plugins/fs-compress/fs-compress.c index 4088c58db7..81dfb8c66f 100644 --- a/src/plugins/fs-compress/fs-compress.c +++ b/src/plugins/fs-compress/fs-compress.c @@ -413,6 +413,7 @@ const struct fs fs_class_compress = { fs_compress_delete, fs_compress_iter_init, fs_compress_iter_next, - fs_compress_iter_deinit + fs_compress_iter_deinit, + NULL } };