Thread: pg_dump 9.1.1 hanging (collectSecLabels gets 0 labels)
We have a cluster running 9.1.1 where pg_dump hangs when we try to dump some a database inside of the cluster. The server is running AIX. I can see this on clean cluster where we do an initdb, followed by a createdb and try running pg_dump. I've tracked the issue down to collectSecLabels in pg_dump.c SELECT label, provider, classoid, objoid, objsbid FROM pg_catalog.pg_seclabel; returns 0 rows. The code in collectSecLabels() is not prepared to deal with a zero row result and tries to malloc 0 bytes. I am not yet sure if the problem is that my pg_seclabel is empty or if the issue is in collectSecLabels() or if collectSecLabels shouldn't even be called. Has anyone seen something similar?
Steve Singer <ssinger@ca.afilias.info> writes: > I've tracked the issue down to collectSecLabels in pg_dump.c > SELECT label, provider, classoid, objoid, objsbid FROM > pg_catalog.pg_seclabel; > returns 0 rows. > The code in collectSecLabels() is not prepared to deal with a zero row > result and tries to malloc 0 bytes. pg_seclabel is almost always empty, so I'm not convinced that you've identified your problem correctly. regards, tom lane
On 11-11-09 06:35 PM, Tom Lane wrote: > Steve Singer<ssinger@ca.afilias.info> writes: >> I've tracked the issue down to collectSecLabels in pg_dump.c > >> SELECT label, provider, classoid, objoid, objsbid FROM >> pg_catalog.pg_seclabel; > >> returns 0 rows. > >> The code in collectSecLabels() is not prepared to deal with a zero row >> result and tries to malloc 0 bytes. > > pg_seclabel is almost always empty, so I'm not convinced that you've > identified your problem correctly. > > regards, tom lane > The attached patch seems to fix the issue. The man page for malloc on AIX is pretty clear on what happens when you try to malloc 0 bytes. It returns NULL.
Attachment
Steve Singer <ssinger@ca.afilias.info> writes: > The man page for malloc on AIX is pretty clear on what happens when you > try to malloc 0 bytes. It returns NULL. Yes, that's a pretty common behavior for malloc(0). It should not cause a problem here AFAICS. ... Oh, I see, the problem is that &labels[-1] might not compare to &labels[0] the way we want. I think only the first hunk of your patch is actually necessary. regards, tom lane
On 11-11-10 02:00 PM, Tom Lane wrote: > Steve Singer<ssinger@ca.afilias.info> writes: >> The man page for malloc on AIX is pretty clear on what happens when you >> try to malloc 0 bytes. It returns NULL. > > Yes, that's a pretty common behavior for malloc(0). It should not cause > a problem here AFAICS. > > ... Oh, I see, the problem is that&labels[-1] might not compare to > &labels[0] the way we want. I think only the first hunk of your > patch is actually necessary. > > regards, tom lane > Yes the problem is still fixed if I only apply the first hunk.
Steve Singer <ssinger@ca.afilias.info> writes: > On 11-11-10 02:00 PM, Tom Lane wrote: >> ... Oh, I see, the problem is that&labels[-1] might not compare to >> &labels[0] the way we want. I think only the first hunk of your >> patch is actually necessary. > Yes the problem is still fixed if I only apply the first hunk. OK, everything seems satisfactorily explained then. Will commit the fix, thanks for the report! regards, tom lane