Tarantool development patches archive
 help / color / mirror / Atom feed
From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Leonid Vasiliev <lvasiliev@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v2] Add some cancellation guard
Date: Mon, 16 Mar 2020 14:23:56 +0300	[thread overview]
Message-ID: <20200316112356.GA27301@uranus> (raw)
In-Reply-To: <0e7fddec984120e36c098cd546ecae4fddc726cd.1577346185.git.lvasiliev@tarantool.org>

On Thu, Dec 26, 2019 at 10:46:38AM +0300, Leonid Vasiliev wrote:
> We need to set a thread cancellation guard, because
> another thread may cancel the current thread at a
> really bad time (messages flush, mutex lock)
> 
> Fixes: #4127
> 
> https://github.com/tarantool/tarantool/issues/4127
> https://github.com/tarantool/tarantool/tree/lvasiliev/gh-4127-WAL-thread-stucks
> 
> ---
>  src/lib/core/cbus.c        |  22 +++++
>  src/tt_pthread.h           |   5 +
>  test/unit/CMakeLists.txt   |   5 +
>  test/unit/cbus_hang.c      | 187 +++++++++++++++++++++++++++++++++++++
>  test/unit/cbus_hang.result |   4 +
>  5 files changed, 223 insertions(+)
>  create mode 100644 test/unit/cbus_hang.c
>  create mode 100644 test/unit/cbus_hang.result
> 
> diff --git a/src/lib/core/cbus.c b/src/lib/core/cbus.c
> index b3b1280e7..d3566bc3a 100644
> --- a/src/lib/core/cbus.c
> +++ b/src/lib/core/cbus.c
> @@ -143,6 +143,13 @@ cpipe_destroy(struct cpipe *pipe)
>  	struct cmsg_poison *poison = malloc(sizeof(struct cmsg_poison));
>  	cmsg_init(&poison->msg, route);
>  	poison->endpoint = pipe->endpoint;
> +
> +	/*
> +	 * The thread should not be canceled while mutex is locked
> +	*/
> +	int old_cancel_state;
> +	tt_pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancel_state);

Don't we need to disable cancel at the entry of this cpipe_destroy?
Thus trigger_destroy would be guarantee to finish, or it is not
that important in which moment we disable cancelling?

Other than that the patch looks ok to me, still the overall cbus
code looks a bit fishy. Do we really need these threads to be
cancellable?

  reply	other threads:[~2020-03-16 11:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-26  7:46 Leonid Vasiliev
2020-03-16 11:23 ` Cyrill Gorcunov [this message]
2020-03-17 18:49   ` Georgy Kirichenko
2020-03-17 19:16     ` Cyrill Gorcunov
2020-03-18  9:00   ` lvasiliev
2020-03-18  9:34     ` Cyrill Gorcunov
2020-03-18  8:26 ` Konstantin Osipov
2020-03-23  6:43   ` lvasiliev
2020-03-20 11:17 ` Kirill Yukhin

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=20200316112356.GA27301@uranus \
    --to=gorcunov@gmail.com \
    --cc=lvasiliev@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v2] Add some cancellation guard' \
    /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