I think it's possible that, if an exception is thrown by
an Encoder thread during the clear-out loop at the
top of Encoder::end, that loop will hang waiting for
a notify() on _full_condition that never comes.
Fix this by rethrow()ing in this loop and notifying
_full_condition if an encoder thread throws an exception.