pijul nest
guest [sign in]

Fixing a double-free of roots after deletions (the root was freed both by handle_merge and by update_root)

[?]
Feb 9, 2021, 9:18 PM
WAKPPBKONQUA3G7HWH52ZKYG5PLZEAG3HFAYGIYLA4NVEPRZUQEAC

Dependencies

  • [2] OFINGD26 implementing prev() on cursors (+ some cleanup)
  • [3] W26CFMAQ Improving safety of cursors
  • [4] OP6SVMOD Resetting history
  • [5] QEUTVAZ4 Splitting btree::page
  • [6] UUUVNC4D Debugging/cleanup around cursors
  • [7] OTWDDJE7 Trait/type cleanup

Change contents

  • edit in sanakirja-core/src/btree/del.rs at line 393
    [3.37905]
    [3.2311]
    debug!(
    "handle_merge for level {:?}, freed {:?}",
    cursor.pointer(),
    freed
    );
  • replacement in sanakirja-core/src/btree/del.rs at line 399
    [3.2361][3.446:490]()
    free[cursor.pointer() + 1] = freed;
    [3.2361]
    [3.62825]
    free[cursor.pointer()] = freed;
  • replacement in sanakirja-core/src/btree/del.rs at line 543
    [3.38675][3.38675:38716](),[3.38716][3.491:535](),[3.535][3.38716:38748](),[3.38716][3.38716:38748](),[3.38748][2.10591:10625](),[2.10625][3.38775:38785](),[3.38775][3.38775:38785]()
    Put::Ok(Ok { page, freed }) => {
    debug!("ok freed {:?}", freed);
    free[0][0] = freed;
    db.db = page.0.offset
    }
    [3.38675]
    [3.38785]
    Put::Ok(Ok { page, .. }) => db.db = page.0.offset,
  • replacement in sanakirja-core/src/btree/del.rs at line 549
    [3.38891][3.38891:38910]()
    freed,
    [3.38891]
    [3.38910]
    ..
  • edit in sanakirja-core/src/btree/del.rs at line 551
    [3.38925][3.536:583](),[3.583][3.38925:38957](),[3.38925][3.38925:38957]()
    debug!("split freed {:?}", freed);
    free[0][0] = freed;