Alexander Lakhin <[email protected]> writes:
> Could you please look at an issue apparently related to the change shown
> above? This simple modification:
> ...
> (That its, the error message added in 26ec6b594, triggers double pfree and
> segfault now.)

Hah, nice one.  Apparently the "detach the queue" path in 
mq_putmessage() has never ever been tested, because it
contains a double pfree, and this fixes it:

diff --git a/src/backend/libpq/pqmq.c b/src/backend/libpq/pqmq.c
index 21ce180c78d..d038a9da515 100644
--- a/src/backend/libpq/pqmq.c
+++ b/src/backend/libpq/pqmq.c
@@ -140,7 +140,6 @@ mq_putmessage(char msgtype, const char *s, size_t len)
                if (pq_mq_handle != NULL)
                {
                        shm_mq_detach(pq_mq_handle);
-                       pfree(pq_mq_handle);
                        pq_mq_handle = NULL;
                }
                return EOF;

The necessity of this can be observed by noting that the last
step in shm_mq_detach() is to pfree the pointer it was handed.

                        regards, tom lane


Reply via email to