do {
nxt = agprvnode(g,n);
if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnodesetfinger, n, FALSE) != SUCCESS) return FAILURE;
- AGSEQ(n) = AGSEQ(n) + 1;
+ uint64_t seq = AGSEQ(n) + 1;
+ assert((seq & SEQ_MASK) == seq && "sequence ID overflow");
+ AGSEQ(n) = seq & SEQ_MASK;
if (agapply (g, (Agobj_t *) n, (agobjfn_t) agnoderenew, n, FALSE) != SUCCESS) return FAILURE;
if (n == fst) break;
n = nxt;
} while (n);
if (agapply (g, (Agobj_t *) snd, (agobjfn_t) agnodesetfinger, n, FALSE) != SUCCESS) return FAILURE;
- AGSEQ(snd) = AGSEQ(fst) - 1;
+ assert(AGSEQ(fst) != 0 && "sequence ID overflow");
+ AGSEQ(snd) = (AGSEQ(fst) - 1) & SEQ_MASK;
if (agapply (g, (Agobj_t *) snd, (agobjfn_t) agnoderenew, snd, FALSE) != SUCCESS) return FAILURE;
return SUCCESS;
}