As suggested by Paolo, I have moved the RngRequest implementation up to the RngBackend parent class and made both child classes use it. Apart from the refactoring, the only functional change compared to v1 is the use of heap instead of stack allocation for the read buffer in rng-random.
The parent class takes care of creating new requests and adding them to the queue, as well as removing them from the queue and deleting them. Child classes have access to the raw GSList * to do whatever else they need to do (walk the queue, peek the head of the queue, ..) [PATCH v2 1/4] rng: remove the unused request cancellation code [PATCH v2 2/4] rng: move request queue from RngEgd to RngBackend [PATCH v2 3/4] rng: move request queue cleanup from RngEgd to [PATCH v2 4/4] rng: add request queue support to rng-random