Tarantool development patches archive
 help / color / mirror / Atom feed
From: Serge Petrenko <sergepetrenko@tarantool.org>
To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>,
	tarantool-patches@dev.tarantool.org, gorcunov@gmail.com
Subject: Re: [Tarantool-patches] [PATCH 1/4] fiber: introduce fiber.arg
Date: Mon, 9 Nov 2020 15:49:45 +0300	[thread overview]
Message-ID: <3856eab8-f039-e3ac-c07d-891faf1b4570@tarantool.org> (raw)
In-Reply-To: <8642a26fc2530318c1ef755d706d6bedc9d59684.1604858551.git.v.shpilevoy@tarantool.org>


08.11.2020 21:03, Vladislav Shpilevoy пишет:
> 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

Hi! Thanks for the patch!

LGTM.

> ---
>   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 {

-- 
Serge Petrenko

  reply	other threads:[~2020-11-09 12:49 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 ` [Tarantool-patches] [PATCH 1/4] fiber: introduce fiber.arg Vladislav Shpilevoy
2020-11-09 12:49   ` Serge Petrenko [this message]
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=3856eab8-f039-e3ac-c07d-891faf1b4570@tarantool.org \
    --to=sergepetrenko@tarantool.org \
    --cc=gorcunov@gmail.com \
    --cc=tarantool-patches@dev.tarantool.org \
    --cc=v.shpilevoy@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