From: Ævar Arnfjörð Bjarmason Date: Wed, 29 Dec 2021 01:48:33 GMT Subject: Re: [PATCH v2 5/9] trace2: add thread-name override to perf target Message-ID: <211229.86ilv8gos7.gmgdl@evledraar.gmail.com> In-Reply-To: <82c445b75f1002bcfa0a770bd47038a747d98970.1640720202.git.gitgitgadget@gmail.com> On Tue, Dec 28 2021, Jeff Hostetler via GitGitGadget wrote: > From: Jeff Hostetler > > Teach the message formatter in the Trace2 perf target to accept an > optional thread name argument. This will override the thread name > inherited from the thread local storage data block. > > This will be used in a future commit for global events that should > not be tied to a particular thread, such as a global stopwatch timer. We already have a "ctx", and that "ctx" has a "thread_name", but here and in the preceding commit we're adding a "thread_name" to every caller of these functions in case we'd like to override it. Wouldn't it make more sense to just pass a "ctx" to these functions? One of them already takes it, here's an (obviously incomplete) fixup on top of your series to make the one that doesn't take a "ctx", and for the only non-NULL users of "thread_name" to just use a trivial helper to pass in a "ctx" with a new "thread_name", then to swap it back. It would make for a smaller diffstat for this already large series, or we could do exactly what we're doing now, but avoid the churn of adjusting every caller by introducing a new sister function for those who want this parameter to be non-NULL. (The below patch is "broken" in that __FILE__ and __LINE__ need to be passed in as parameters, but this is just a trivial change for show/commentary) diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c index b9eb2cdb77a..7aaec83dff7 100644 --- a/trace2/tr2_tgt_event.c +++ b/trace2/tr2_tgt_event.c @@ -82,16 +82,15 @@ static void fn_term(void) static void event_fmt_prepare(const char *event_name, const char *file, int line, const struct repository *repo, struct json_writer *jw, - const char *thread_name_override) + struct tr2tls_thread_ctx *ctx) { struct tr2_tbuf tb_now; + if (!ctx) + ctx = tr2tls_get_self(); jw_object_string(jw, "event", event_name); jw_object_string(jw, "sid", tr2_sid_get()); - jw_object_string(jw, "thread", - ((thread_name_override && *thread_name_override) - ? thread_name_override - : tr2tls_get_self()->thread_name)); + jw_object_string(jw, "thread", ctx->thread_name); /* * In brief mode, only emit