Hello list.

I'm a Rust newbie and I'm really excited about this language

As a process of knowing each other, I'm implementing a libgit2 bindings for 
Rust. (You can look at the code at here: https://github.com/kimhyunkang/git2-rs 
 though it has virtually no features for now.)

libgit2 uses thread local storage to store and retrieve error info from last 
library call. But the Rust tutorial states that tasks are considered green 
threads. As far as I can understand, that means tasks are not mapped 1:1 to OS 
thread, thus making thread-local storage unsafe for direct use.

Then I rememberd errno, another thread local storage that I know of, and 
checked the source code to find out how core::os handles errno. But 
core::os::errno seems to just call __errno without locking or blocking anything.

So, the question is:

How does the runtime makes sure that errno is not overwritten by another 
syscall failure? Is it safe to ignore the possibility of another task scheduled 
into the same OS thread?

   - kimhyunkang
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to