[Xapian-tickets] [Xapian] #675: Exception in [Chert/Glass]Cursor::find_entry()
Xapian
nobody at xapian.org
Mon Apr 27 13:41:55 BST 2015
#675: Exception in [Chert/Glass]Cursor::find_entry()
---------------------------+-----------------------------
Reporter: Kronuz | Owner: olly
Type: defect | Status: assigned
Priority: high | Milestone: 1.3.3
Component: Backend-Chert | Version:
Severity: normal | Resolution:
Keywords: | Blocked By:
Blocking: | Operating System: All
---------------------------+-----------------------------
Changes (by olly):
* milestone: => 1.3.3
Comment:
Aha, so the new `ChertCursor` copies the pointer to the root block from
the cursor in the table, so that's why this the freeing of the blocks in
built-in cursor in `ChertTable::close()` breaks external the cursor which
the `ChertValueManager` holds.
In glass, we reference count the cursor blocks with copy-on-write, so this
shouldn't be an issue - the root block will be valid until all references
are gone.
I think the other problem (which affects both chert and glass) is when the
table gains levels over a reopen - then the cursor in the
`ChertValueManager` doesn't have enough levels and we end up iterating off
the end of it. I've not yet confirmed that's what's happening, but
assuming it is the patch does indeed look correct.
(Mostly orthogonally, it would be nice to reduce the rather needless churn
of memory allocations that currently happens when `reopen()` finds a new
revision...)
--
Ticket URL: <http://trac.xapian.org/ticket/675#comment:7>
Xapian <http://xapian.org/>
Xapian
More information about the Xapian-tickets
mailing list