Checkpointing is a well-known technique to build faulttolerant distributed applications based on rollback-recovery. Briefly, every process periodically saves the application's local state as a checkpoint and when a failure occurs, the distributed computation restarts from its most recent consistent global checkpoint, or recovery line. If checkpoints are taken autonomously by processes (called basic checkpoints) and no coordination exists, a failure could force the application to roll back to a very initial state. This happens because checkpoint dependencies can be non-causal and make a checkpoint depend on itself, not being part of any consistent global checkpoint. Communication-induced checkpointing protocols avoid this problem by piggybacking control information in the application messages and having processes take extra forced checkpoints. Some communicationinduced checkpointing protocols ensure that all checkpoint dependencies are causal and, therefore, can be tracked online during the application execution. This property, called rollback-dependency trackability (RDT), provides important guaranties for the recovery system and has been shown to be helpful in many contexts [3].The price of autonomy in communication-induced checkpointing protocols is storage space. The absence of explicit coordination makes it difficult to identify obsolete checkpoints, that is, those not necessary for future recoveries. Although garbage collection incurs overhead, being an important pragmatic issue in rollback-recovery, it has received little attention in the literature [1]. Existent algorithms eliminate all or a subset of the obsolete checkpoints relying either on time assumptions or reliable control message exchanges. Ideally, garbage collection should be as little intrusive as Copyright is held by the author/owner. PODC'04, July 25-28, 2004, St. Johns, Newfoundland, Canada. ACM 1-58113-802-4/04/0007. possible, not introducing any overhead in the normal computation or blocking the execution of processes. We capture this intuition with the notion of asynchronous garbage collection, which relies only on information piggybacked in the application messages.The paper shows that it is possible to do asynchronous garbage collection when RDT holds [2]. We introduce a necessary and sufficient condition to make a checkpoint obsolete in RDT scenarios and derive from that a sufficient condition to identify obsolete checkpoints based only on causal knowledge. Let c γ i represent the γ-th checkpoint taken by process pi, where γ (≥ 0) is its index, and lk i(j) denote the index of the last checkpoint of process pj known by process pi, that is, the last checkpoint of pj that causally precedes the current state of pi. If no such checkpoint exists, we assume lk i(j) = −1. Theorem 1 presents a condition that allows asynchronous garbage collection in RDT scenarios [2]. Theorem 1. A checkpoint c γ i is obsolete if there is no process p f such that lk i(f ) ≥ 0 and c γ i is the last checkpoint of pi not causally preceded by c lk i (f ) f .Although ...