In pursuit of removing a Valgrind-detected leak, I inserted
"pfree(pq_mq_handle);" into mq_putmessage's recursion-trouble-recovery
code path, failing to notice that shm_mq_detach would have pfree'd
that block just before (i.e., this particular code path did not leak).
So now that was a double pfree. We didn't notice because the
recursion scenario isn't exercised in our regression tests, but
Alexander Lakhin found it via code fuzzing.
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/
b8b40954-e155-41b3-9af8-
ad4f261a1b64@gmail.com
if (pq_mq_handle != NULL)
{
shm_mq_detach(pq_mq_handle);
- pfree(pq_mq_handle);
pq_mq_handle = NULL;
}
return EOF;