Exit relays will continue reading until circuit dies (in old versions) or buffer of a relay becomes too big (in new versions, intended to prevent DoS) .
If you are a 'honest' client, the exit node will only make 1000 cells and then stop reading due to the hard-coded 1000-cell limit on sending window. So yes, it basically depends on something to the circuit asking for the next packet, the RELAY_SENDME
cell. A malicious client can do a bit more to kill the guard.
In the efficient version, the adversary controls only a client. She creates a circuit, choosing the victim for the entry position, and then instructs the exit relay to download a large file from some external Internet server. The client stops reading on the TCP connection to the entry relay, causing it to buffer 1000 cells.
The best defense, as we suggested to the Tor developers, is to implement a custom, adaptive out-of-memory circuit killer in application space (i.e. inside Tor). The circuit killer is only activated when memory becomes scarce, and then it chooses the circuit with the oldest front-most cell in its circuit queue. This will prevent the Sniper Attack by killing off all of the attack circuits.