On Mon, Nov 26, 2007 at 06:26:38PM -0500, [EMAIL PROTECTED] wrote: > Update of /afs/andrew/system/cvs/src/cyrus/lib > In directory unix35.andrew.cmu.edu:/var/tmp/cvs-serv8181 > > Modified Files: > cyrusdb_skiplist.c > Log Message: > Yet more skiplist fixes from Fastmail.fm
Don't worry, I've got some more patches for you! cyrus-skiplist-transactions-2.3.10.diff It's pretty well documented in the diff header. Basically, if a transaction was open on a database and you made a read-only query without a transaction on it (actually, any other query without passing the _SAME_ transaction object) it would screw up royally. Not to mention that passing a transaction at all after it had been used in a commit or abort would have made a mess. This adds some serious sanity checks. One thing to be aware of, it spits a fair bit of syslog traffic about double-opening of username.seen files. I consider that an un-fixed bug, there should be no need to have two separate filehandles open to them, and it's a recipe for later disaster if you're half way through an operation and do something with the other handle, as it won't respect locking thanks to being inside the same process. That said, you might want to turn the syslog warning down or off, I'm not too concerned either way. cyrus-skiplist-transactionuse-2.3.10.diff So far just a single totally bogus use of transactions within seen_merge. I chose to just go with no transaction for the foreach part, but it would be trivial to use a different transaction object instead if you wanted to avoid all the read locks and unlocking. Whatever - what's there now is bogus. Even if you don't take the first patch as-is, you should certainly apply the second patch before the next release :) Bron ( back on the patch wagon! )