]> granicus.if.org Git - graphviz/commit
gc: replace inline stack implementation with generic one
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Tue, 5 Apr 2022 14:45:40 +0000 (07:45 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Tue, 12 Apr 2022 00:00:43 +0000 (17:00 -0700)
commit4e2875fd7376338259dcb3ccc8f029d58bdf22dd
treea8bfd87d567ea4735e9cda4fd8967eff76c63a9a
parent7341ae280d0331b32fe3d1f40dc276575110d706
gc: replace inline stack implementation with generic one

This code was using two abstractions, a block `blk_t` and stack `stk_t`, to
amortize the cost of allocations. We can remove the block abstraction and
rewrite the stack implementation to use the simpler generic stack while still
retaining these amortization benefits. Note that this refactoring also makes
initialization of the stack data structure unnecessary as a zeroed `gv_stack_t`
is also a valid empty stack.

The new code also deallocates the stack prior to exit, aiding tools like
Valgrind and Address Sanitizer.

This pattern of using both a hand-rolled block and hand-rolled stack appears in
numerous places in the Graphviz code base, of which this is just one instance.

Gitlab: #1793
cmd/tools/gc.c