From: Simon Marchi via lttng-dev <lttng-dev@lists.lttng.org>
To: "MOESSBAUER, Felix" <felix.moessbauer@siemens.com>,
"lttng-dev@lists.lttng.org" <lttng-dev@lists.lttng.org>
Subject: Re: libbabeltrace2: question about thread safety
Date: Thu, 5 Nov 2026 14:48:19 -0500 [thread overview]
Message-ID: <401fff05-cde1-4cb0-b421-132192bb7366@polymtl.ca> (raw)
In-Reply-To: <44074c36528ca4a30909e21072ae67f37b0c244b.camel@siemens.com>
On 10/23/26 4:11 AM, MOESSBAUER, Felix via lttng-dev wrote:
> Hi,
>
> I just noticed that the reference counting in libbabeltrace2 is not
> atomic - and by that not thread safe. As I can't know where reference
> counting on global objects (like the plugin or component instances) is
> done internally, I'm assuming I can't execute two (independent) graphs
> in parallel. Some quick tests with tsan seem to confirm my assumption.
>
> Is there any (documented) way to run two graphs in parallel? Or shall
> the whole library just be used behind a global mutex?
(resending from another address to try to avoid the spam filter)
I think the idea was that running two graphs simultaneously in two
threads would not be a problem, because they don't share anything. But
you are right that plugins and component classes are actually shared.
The action of adding a component to a graph touches the component class'
refcount, and so does destroying the graph (and there is the "freeze"
status too, if the lib is built in dev mode).
I think it would make sense for libbabeltrace2 to have some
synchronization in the plugin / component class area to allow for two
threads to build, run and destroy graphs without requiring any locking
on the user side. But that won't be trivial, and it's not on the
roadmap as we speak.
In the mean time, you could try having a global lock but only for the
graph building and destruction phases? Or have a single thread
responsible for building and destroying graphs. I'd be curious to know
if this is enough or if there are other concurrent accesses we haven't
spotted.
Simon
next prev parent reply other threads:[~2026-11-05 19:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 8:11 MOESSBAUER, Felix via lttng-dev
2026-11-05 19:48 ` Simon Marchi via lttng-dev [this message]
[not found] ` <4b159ade-97af-4008-be23-c81be291f948@simark.ca>
2026-11-06 8:57 ` Moessbauer, Felix via lttng-dev
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=401fff05-cde1-4cb0-b421-132192bb7366@polymtl.ca \
--to=lttng-dev@lists.lttng.org \
--cc=felix.moessbauer@siemens.com \
--cc=simon.marchi@polymtl.ca \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox