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]>>>>
While working on using humility as a library I ran into this:
This looks like the
addr2lineandgimlicrates don't play nice withasyncat the moment and humility needs a little bit of refactoring.