[Xapian-discuss] Closing a DB

Richard Boulton richard at lemurconsulting.com
Thu Aug 9 09:56:46 BST 2007


David Morris wrote:
> As part of my whole indexing thing, I want to move the databases 
> around, from within the code. So, I figured that the safest bet 
> would be to close the DB before attempting to move it. 
> 
> But there's no Xapian::Database::close() or even 
> Xapian::WritableDatabase::close().
...
> g_Xap = Xapian::WritableDatabase();
> 
> But that doesn't force a close, it just does the whole refcount 
> thing, which could potentially leave it open if someone still 
> has it laying around.

It's worse that that - in fact, if there is any xapian object _derived_ 
from the WritableDatabase (like a PostingIterator) still around, the 
database won't get closed (though you won't be able to access it).

> Why is there no close() method? What's the "official" way to 
> close a DB?

It would definitely be good to add a close() method.  There is an open 
bug about this issue: see 
http://www.xapian.org/cgi-bin/bugzilla/show_bug.cgi?id=173

Unfortunately, it's not that easy to add a close() method, because it 
would also require all the objects which use a database to cope with the 
database being closed underneath them.  It'll get implemented at some 
stage, but we've been trying to think of a neat way of doing so...

[Actually, bug #173 only discusses adding a close() method to the 
bindings, but I think the only plausible way of doing that would be to 
add a close() method to the C++ interface, and wrap it.]

Feel free to comment on #173 if you have any thoughts.

-- 
Richard



More information about the Xapian-discuss mailing list