oxidecomputer / oxidecomputer/humility
probe attach doesn't compile in `async` contexts
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 584
- Forks
- 63
- Avg merge
- 3h
- Merged PRs (30d)
- 2
Description
While working on using humility as a library I ran into this:
error[E0277]: `OnceCell<Result<Option<Box<DwoUnit<EndianReader<LittleEndian, Arc<[u8]>>>>>, Error>>` cannot be shared between threads safely
--> verifier/src/hiffy.rs:108:5
|
108 | async fn get_measurement_log(&self) -> Result<Log, AttestError> {
| ^^^^^ `OnceCell<Result<Option<Box<DwoUnit<EndianReader<LittleEndian, Arc<[u8]>>>>>, Error>>` cannot be shared between threads safely
|
= help: within `[addr2line::unit::ResUnit<gimli::read::endian_reader::EndianReader<gimli::endianity::LittleEndian, Arc<[u8]>>>]`, the trait `Sync` is not implemented for `OnceCell<Result<Option<Box<DwoUnit<EndianReader<LittleEndian, Arc<[u8]>>>>>, Error>>`
= note: if you want to do aliasing and mutation between multiple threads, use `std::sync::OnceLock` instead
...
note: required because it appears within the type `HubrisArchive`
--> /home/labbott/.cargo/git/checkouts/humility-a1f94f6d75a1535e/80dae8d/humility-core/src/hubris.rs:1133:12
|
1133 | pub struct HubrisArchive {
| ^^^^^^^^^^^^^
note: required because it appears within the type `AttestHiffy`
--> verifier/src/hiffy.rs:66:12
|
66 | pub struct AttestHiffy {
| ^^^^^^^^^^^
= note: required for `&AttestHiffy` to implement `Send`
note: required because it's used within this `async` block
--> verifier/src/hiffy.rs:108:5
|
108 | async fn get_measurement_log(&self) -> Result<Log, AttestError> {
| ^^^^^
= note: required for the cast from `Pin<Box<{async block@verifier/src/hiffy.rs:108:5: 108:10}>>` to `Pin<Box<dyn Future<Output = Result<MeasurementLog<16>, AttestError>> + Send>>`
= note: the full name for the type has been written to '/home/labbott/dice-util/target/debug/deps/dice_verifier-b365f235203b0dbe.long-type-6895664460909633821.txt'
= note: consider using `--verbose` to print the full type name to the console
$ cat /home/labbott/dice-util/target/debug/deps/dice_verifier-b365f235203b0dbe.long-type-3655248516427123308.txt
std::ptr::Unique<[addr2line::unit::ResUnit<gimli::read::endian_reader::EndianReader<gimli::endianity::LittleEndian, Arc<[u8]>>>]>
hashbrown::raw::RawTable<(HubrisTask, addr2line::Context<gimli::read::endian_reader::EndianReader<gimli::endianity::LittleEndian, Arc<[u8]>>>)>
hashbrown::map::HashMap<HubrisTask, addr2line::Context<gimli::read::endian_reader::EndianReader<gimli::endianity::LittleEndian, Arc<[u8]>>>, RandomState>
HashMap<HubrisTask, addr2line::Context<gimli::read::endian_reader::EndianReader<gimli::endianity::LittleEndian, Arc<[u8]>>>>
This looks like the addr2line and gimli crates don't play nice with async at the moment and humility needs a little bit of refactoring.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at verifier/src/hiffy.rs:108 and inspect HubrisArchive in humility-core/src/hubris.rs:1133, where the compiler reports the OnceCell Send/Sync problem. Reproduce the async compilation failure and trace the addr2line and gimli types involved. Done means probe attach compiles in async contexts without this error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 42/100