On 9/1/2020 9:51 AM, Jeff King wrote: > On Tue, Sep 01, 2020 at 09:04:36AM -0400, Derrick Stolee wrote: >> Adding an `if (!size) {free(ptr); return NULL;}` block was what I >> expected. Was that chosen just so we can rely more on the system >> realloc(), or is there a performance implication that I'm not >> seeing? > > I went back and forth on whether to do that or not. This case should > basically never happen, so I like both the performance and readability > of only triggering it when realloc() returns NULL. But it would get rid > of the hand-waving above, and I doubt the performance is measurable. > > If we do handle it up-front, then I think we'd actually want: > > if (!size) { > free(ptr); > return xmalloc(0); > } > > (i.e., to never return NULL for consistency with xmalloc() and > xcalloc()). Good point. In that sense, your change makes a lot more sense for staying consistent without strangeness like xmalloc(0). >>> @@ -120,7 +120,7 @@ void *xrealloc(void *ptr, size_t size) >>> memory_limit_check(size, 0); >>> ret = realloc(ptr, size); >>> if (!ret && !size) >>> - ret = realloc(ptr, 1); >>> + ret = realloc(ret, 1); >> >> I appreciate all the additional context for such a small change. > > Somebody's got to complete with you for ratio of commit message to diff > lines. :) Pretty sure I have a long way to match, but it is important to have goals. -Stolee