Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

probe attach doesn't compile in `async` contexts

Aperta
#723 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
42/100
Tipo di issue
Refactoring
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
rust
Ambito
devtools

Direzione di ricerca

Inizia da verifier/src/hiffy.rs:108 e ispeziona HubrisArchive in humility-core/src/hubris.rs:1133, dove il compilatore segnala il problema Send/Sync di OnceCell. Riproduci il fallimento della compilazione async e traccia i tipi addr2line e gimli coinvolti. Il lavoro è completato quando probe attach compila nei contesti async senza questo errore.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Rust
Stelle
587
Fork
64
Merge medio
2g 1h
PR unite (30g)
7

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di oxidecomputer/humility

Tutte le issue di oxidecomputer/humility

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.