From: Nikita Pettik <korablev@tarantool.org>
To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH 4/7] box: introduce stacked diagnostic area
Date: Thu, 20 Feb 2020 14:53:51 +0300 [thread overview]
Message-ID: <20200220115351.GE40100@tarantool.org> (raw)
In-Reply-To: <c32161ff-ad28-3f88-022a-a6c0ec617a74@tarantool.org>
On 19 Feb 22:10, Vladislav Shpilevoy wrote:
>
>
> On 19/02/2020 15:16, Nikita Pettik wrote:
> > @@ -163,7 +221,12 @@ diag_clear(struct diag *diag)
> > {
> > if (diag->last == NULL)
> > return;
> > - error_unref(diag->last);
> > + struct error *last = diag->last;
> > + while (last != NULL) {
> > + struct error *tmp = last->next;
> > + error_unref(last);
> > + last = tmp;
> > + }
> > diag->last = NULL;
>
> Hi! Please, read what I wrote in the ticket about box.error.new(). You
> should not clear all the errors. The diag owns only the head ref. Head
> destruction should unref a next error. Destruction of a next error
> should unref next next error and so on.
Hi,
I've realized that current approach is a bit broken only by now.
You are right: diag_clear() should unref only head meanwhile error
destruction should result in decrementing reference counter of previous
error. Just for the record why my implementation doesn't work correct:
e1 = box.error.new(...) -- e1 has 1 ref
e2 = box.error.new(...) -- e2 has 1 ref
e1:set_prev(e2)
box.error.set(e1) -- e1 has 2 ref as a head of diag, e2 still has 1 ref
box.error.clear() -- e1 has 1 ref, but e2 has 0 so it is destroyed.
-- However, it still has Lua reference, so when GC will attempt to
-- destroy it again, it will lead to crash.
Will fix it soon, re-send patch and update rfc.
next prev parent reply other threads:[~2020-02-20 11:53 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-19 14:16 [Tarantool-patches] [PATCH 0/7] Stacked diagnostics area Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 1/7] box: rename diag_add_error to diag_set_error Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 2/7] box/error: introduce box.error.set() method Nikita Pettik
2020-02-19 14:26 ` Cyrill Gorcunov
2020-02-19 14:30 ` Nikita Pettik
2020-02-19 14:53 ` Cyrill Gorcunov
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 3/7] box/error: don't set error created via box.error.new to diag Nikita Pettik
2020-02-22 17:18 ` Vladislav Shpilevoy
2020-03-25 1:02 ` Nikita Pettik
2020-03-26 0:22 ` Vladislav Shpilevoy
2020-03-26 1:03 ` Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 4/7] box: introduce stacked diagnostic area Nikita Pettik
2020-02-19 21:10 ` Vladislav Shpilevoy
2020-02-20 11:53 ` Nikita Pettik [this message]
2020-02-20 18:29 ` Nikita Pettik
2020-02-23 17:43 ` Vladislav Shpilevoy
2020-03-25 1:34 ` Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 5/7] box/error: clarify purpose of reference counting in struct error Nikita Pettik
2020-02-23 17:43 ` Vladislav Shpilevoy
2020-03-25 1:40 ` Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 6/7] iproto: refactor error encoding with mpstream Nikita Pettik
2020-02-23 17:44 ` Vladislav Shpilevoy
2020-03-25 1:42 ` Nikita Pettik
2020-02-19 14:16 ` [Tarantool-patches] [PATCH 7/7] iproto: support error stacked diagnostic area Nikita Pettik
2020-02-23 17:43 ` Vladislav Shpilevoy
2020-03-25 1:38 ` Nikita Pettik
2020-02-22 17:18 ` [Tarantool-patches] [PATCH 0/7] Stacked diagnostics area Vladislav Shpilevoy
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=20200220115351.GE40100@tarantool.org \
--to=korablev@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--cc=v.shpilevoy@tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH 4/7] box: introduce stacked diagnostic area' \
/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