Comments (3)
I see. We don't rely on such assumption on rtrb. Thank you for your advice and your amazing crate!
from minitrace-rust.
Thank you! I think we don't thread synchronization here. The is_abandoned()
will eventually return true after the Producer
is dropped, right?
from minitrace-rust.
Yes, it will return true
eventually ... but ... if you access (read or write) some memory (after the call to is_abandoned()
) that has been written to before the Producer
was dropped (without any additional synchronization), you are invoking undefined behavior.
This is an illustration of the situation:
static mut V: u32 = 0;
let (p, c) = rtrb::RingBuffer::<u8>::new(7);
let t = std::thread::spawn(move || {
unsafe { V = 10 };
drop(p);
});
if c.is_abandoned() {
std::sync::atomic::fence(std::sync::atomic::Ordering::Acquire);
unsafe { V = 20 };
}
t.join().unwrap();
Without the fence
, this has undefined behavior (but only since Rust 1.74).
AFAIU, this is only a problem if you have unsafe
code that relies on the synchronization of is_abandoned()
for soundness. In such a case, a fence
can be used to restore the synchronization.
from minitrace-rust.
Related Issues (20)
- Automatically create a root span if none is present. HOT 1
- is it possible to create multiple instances of the collector? HOT 10
- WASM (`wasm32-unknown-unknown`) support? HOT 12
- `minitrace-opentelemetry` doesn't work with `opentelemetry_zipkin` exporter HOT 3
- Feature request: Span property on #[trace] macro HOT 6
- Feature request: allow to use minitrace without global collector
- Panic on wasm: time not implemented on this platform HOT 5
- `Reporter::report` should be `async fn`? 🤔 HOT 4
- RFC: tokio-tracing compatible layer HOT 6
- Profile-Guided Optimization (PGO) benchmark results
- `LocalSpan::enter_with_parent` missing? HOT 9
- `futures::Stream` and `futures::Sink` instrumentation HOT 7
- Add span tags dynamically
- WASM target support improvements HOT 5
- [BUG] LocalSpan is broken in quick functions HOT 4
- loose strict dependency version for `opentelemetry` HOT 1
- Making `futures` an optional dependency HOT 1
- Why Reporter::report gets passed a reference instead of a Vec of owned objects? HOT 1
- qa: missing parent span HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from minitrace-rust.