From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@dev.tarantool.org, gorcunov@gmail.com, sergepetrenko@tarantool.org Subject: [Tarantool-patches] [PATCH 1/4] fiber: introduce fiber.arg Date: Sun, 8 Nov 2020 19:03:54 +0100 [thread overview] Message-ID: <8642a26fc2530318c1ef755d706d6bedc9d59684.1604858551.git.v.shpilevoy@tarantool.org> (raw) In-Reply-To: <cover.1604858551.git.v.shpilevoy@tarantool.org> Struct fiber has a member va_list f_data. It is used to forward arguments to the fiber function when fiber_start() is called, right from the caller's stack. But it is useless when fiber is started asynchronously, with fiber_new + fiber_wakeup. And there is no way to pass anything into such a fiber. This patch adds a new member 'void *arg', which shares memory with va_list f_data, and can be used to pass something into the fiber. The feature is going to be used by raft. Currently raft worker fiber works only with global variables, but soon it will need to have its own pointer at struct raft object. And it can't be started with fiber_start(), because raft code does not yield anywhere in its state machine. Needed for #5303 --- src/lib/core/fiber.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/core/fiber.h b/src/lib/core/fiber.h index 539e5c8e7..08f1dd662 100644 --- a/src/lib/core/fiber.h +++ b/src/lib/core/fiber.h @@ -565,7 +565,19 @@ struct fiber { * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31488 */ fiber_func f; - va_list f_data; + union { + /** + * Argument list passed when the fiber is invoked in a blocking + * way, so the caller may pass arguments from its own stack. + */ + va_list f_data; + /** + * Fiber function argument which passed asynchronously. Can be + * used not to call fiber_start to avoid yields, but still pass + * something into the fiber. + */ + void *arg; + }; int f_ret; /** Fiber local storage. */ struct { -- 2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-11-08 18:04 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-08 18:03 [Tarantool-patches] [PATCH 0/4] Raft module, part 1 - explicit argument Vladislav Shpilevoy 2020-11-08 18:03 ` Vladislav Shpilevoy [this message] 2020-11-09 12:49 ` [Tarantool-patches] [PATCH 1/4] fiber: introduce fiber.arg Serge Petrenko 2020-11-09 14:27 ` Cyrill Gorcunov 2020-11-09 23:59 ` Vladislav Shpilevoy 2020-11-08 18:03 ` [Tarantool-patches] [PATCH 2/4] raft: initialize raft completely at runtime Vladislav Shpilevoy 2020-11-09 12:50 ` Serge Petrenko 2020-11-09 14:59 ` Cyrill Gorcunov 2020-11-09 23:59 ` Vladislav Shpilevoy 2020-11-08 18:03 ` [Tarantool-patches] [PATCH 3/4] raft: add explicit raft argument to all functions Vladislav Shpilevoy 2020-11-09 13:46 ` Serge Petrenko 2020-11-10 0:00 ` Vladislav Shpilevoy 2020-11-08 18:03 ` [Tarantool-patches] [PATCH 4/4] vclock: move to src/lib Vladislav Shpilevoy 2020-11-09 14:12 ` Serge Petrenko 2020-11-09 15:01 ` Cyrill Gorcunov 2020-11-10 21:06 ` [Tarantool-patches] [PATCH 0/4] Raft module, part 1 - explicit argument Alexander V. Tikhonov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=8642a26fc2530318c1ef755d706d6bedc9d59684.1604858551.git.v.shpilevoy@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=gorcunov@gmail.com \ --cc=sergepetrenko@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/4] fiber: introduce fiber.arg' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox