In the absence of documentation, I took `GetWriteTransaction` to be grabbing a write transaction if we already have one in progress, else initiate one.  The implementation appears to be terminating any non-write transaction in progress, so as to be able to initiate a write transaction.  That makes perfect sense to me.  However, when terminating a non-write transaction (in order to make way for a write one), I don't expect to be *committing* it, I expect to be rolling back any changes it might have made - because it was a *non-write* transaction.
So clearly I'm misunderstanding something - and your explanation didn't help me, so it's probably something you're taking for granted, that I don't know about !