Properly dropping a channel
[?]
Feb 26, 2021, 3:47 PM
TZ42DX3BML5C3O5Z6OBVNBCHSIIHT6AOJPD6ICOLOP4LPYFXQN2QCDependencies
- [2]
YN63NUZOSanakirja 1.0 - [3]
VO5OQW4WRemoving anyhow in libpijul - [4]
CCLLB7OIUpgrading to Sanakirja 0.15 + version bump - [5]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting).
Change contents
- edit in libpijul/src/pristine/sanakirja.rs at line 29
#[error("Cannot dropped a borrowed channel: {:?}", c)]ChannelRc { c: String }, - replacement in libpijul/src/pristine/sanakirja.rs at line 1631[3.567504]→[3.53082:53161](∅→∅),[3.16215]→[3.567580:567726](∅→∅),[3.53161]→[3.567580:567726](∅→∅),[3.567580]→[3.567580:567726](∅→∅),[3.567726]→[2.90650:90732](∅→∅),[2.90732]→[3.567915:567992](∅→∅),[3.567915]→[3.567915:567992](∅→∅)
fn drop_channel(&mut self, name: &str) -> Result<bool, Self::GraphError> {let name = SmallString::from_str(name);self.open_channels.borrow_mut().remove(&name);debug!("drop_channel {:?}", name);let result = btree::del(&mut self.txn, &mut self.channels, &name, None)?;debug!("/drop_channel {:?}: {:?}", name, result);Ok(result)fn drop_channel(&mut self, name0: &str) -> Result<bool, Self::GraphError> {let name = SmallString::from_str(name0);let channel = if let Some(channel) = self.open_channels.borrow_mut().remove(&name) {let channel = Rc::try_unwrap(channel.r).map_err(|_| SanakirjaError::ChannelRc { c: name0.to_string() })?.into_inner();Some((channel.graph,channel.changes,channel.revchanges,channel.states,))} else if let Some((name_, chan)) = btree::get(&self.txn, &self.channels, &name, None)? {if name_ == name.as_ref() {Some((Db::from_page(chan.0[0].into()),Db::from_page(chan.0[1].into()),UDb::from_page(chan.0[2].into()),UDb::from_page(chan.0[3].into()),))} else {None}} else {None};if let Some((a, b, c, d)) = channel {btree::drop(&mut self.txn, a)?;btree::drop(&mut self.txn, b)?;btree::drop(&mut self.txn, c)?;btree::drop(&mut self.txn, d)?;}Ok(btree::del(&mut self.txn, &mut self.channels, &name, None)?)