There is a static global, AF, that is reused for a number of gvrender functions,
but none need to retain previous data stored in this array. This hack presumably
was from a time when allocators were much slower. Refactoring this into a local
allocation makes this function thread safe and removes the need to unnecessarily
prolong the lifetime of this allocation, thus decreasing Graphviz memory usage.
This commit introduces a -Wshadow warning about AF, but that will be removed
when we soon remove the static global.
if (job->flags & GVRENDER_DOES_TRANSFORM)
gvre->polyline(job, af, n);
else {
- if (sizeAF < n) {
- sizeAF = n + 10;
- AF = grealloc(AF, sizeAF * sizeof(pointf));
- }
+ pointf *AF;
+ assert(n >= 0);
+ AF = gcalloc((size_t)n, sizeof(pointf));
gvrender_ptf_A(job, af, AF, n);
gvre->polyline(job, AF, n);
+ free(AF);
}
}
}