[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