Retour à la leçonMission
Mission : un cache partage qui panique en production
Diagnostiquer un panic de RefCell double-borrow et une struct recursive qui ne compile pas, puis les corriger.
Contexte
Un cache mono-thread partage entre plusieurs composants d'une appli utilise Rc<RefCell<HashMap<String, i32>>>. Un dev a ecrit une fonction qui, en cas de cle absente, lit la valeur par defaut puis l'insere dans le meme appel :
rust
fn lire_ou_defaut(cache: &Rc<RefCell<HashMap<String, i32>>>, cle: &str) -> i32 {
let emprunt = cache.borrow_mut();
if let Some(v) = emprunt.get(cle) {
*v
} else {
drop(emprunt);
let mut emprunt2 = cache.borrow_mut();
emprunt2.insert(cle.to_string(), 0);
0
}
}Ce code fonctionne, mais un collegue a copie-colle un pattern similaire ailleurs sans le drop(emprunt), et l'application panique en production avec 'already borrowed: BorrowMutError'. Separement, l'equipe veut aussi modeliser une liste chainee simple et n'arrive pas a la faire compiler.