From 61a71b819cc16c58c96498ba1aec77e8e57b0bc0 Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Sat, 23 Jan 2021 18:48:56 +0900 Subject: [PATCH] Fix concurrency overwrite --- youmubot-osu/src/discord/announcer.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/youmubot-osu/src/discord/announcer.rs b/youmubot-osu/src/discord/announcer.rs index 11975ed..88a4d4d 100644 --- a/youmubot-osu/src/discord/announcer.rs +++ b/youmubot-osu/src/discord/announcer.rs @@ -95,7 +95,16 @@ impl youmubot_prelude::Announcer for Announcer { .collect::>() .await; // Update users - *OsuSavedUsers::open(&*d.read().await).borrow_mut()? = data; + let db = &*d.read().await; + let mut db = OsuSavedUsers::open(db); + let mut db = db.borrow_mut()?; + data.into_iter() + .for_each(|(k, v)| match db.get(&k).map(|v| v.last_update.clone()) { + Some(d) if d > v.last_update => (), + _ => { + db.insert(k, v); + } + }); Ok(()) } }