OK, mulling on this some more.... I don't think we should go to such
great lengths to remove the sync'd from swapSearcher.
That sync is harmless in practice (it's uncontended unless the app
screws up and calls .close while another thread is calling
.maybeReopen), and the changes necessary to make it truly lockless
makes SearcherManager's code quite a bit more complex.
Don't get me wrong: it's an impressive feat of concurrent programming
to make swapSearcher lock-free, but just because you can remove a sync
doesn't mean you should.
But we should still fix the original issue, for those apps that do
mess up: can't we simply move the swapSearcher inside the