Those two functions are not clear enough: reset() is made to be also used by change_reader(), rendering both more complex that they should be.
A common function performing only the part of closing the connection and starting a new one (daeling with reader_null situations ) could be a good idea since it avoids duplicated code