Re: pg_upgrade: out of memory

From: "Carrington, Matthew (Produban)" <Matthew(dot)Carrington(at)Produban(dot)co(dot)uk>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: pg_upgrade: out of memory
Date: 2012-10-01 13:53:20
Message-ID: 53E23B63FBFF3645A2CDD9BE5933C60C8B1194F542@ENTAAP2407P.an.ad.anplc.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Tom,

Yes, that look right for AIX . Here's the relevant section from the malloc man page ...

Return Values

Upon successful completion, the malloc subroutine returns a pointer to space
suitably aligned for the storage of any type of object. If the size requested is
0, malloc returns NULL in normal circumstances. However, if the program was
compiled with the defined _LINUX_SOURCE_COMPAT macro, malloc returns a valid
pointer to a space of size 0.

If the request cannot be satisfied for any reason, the malloc subroutine returns

NULL.

Hope that helps.

Matthew

-----Original Message-----
From: Tom Lane [mailto:tgl(at)sss(dot)pgh(dot)pa(dot)us]
Sent: 01 October 2012 14:39
To: Carrington, Matthew (Produban)
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: [GENERAL] pg_upgrade: out of memory

"Carrington, Matthew (Produban)" <Matthew(dot)Carrington(at)produban(dot)co(dot)uk> writes:
> pg_dump: reading user-defined aggregate functions

> Breakpoint 1, exit_horribly (modulename=0x0, fmt=0x10006a590 "out of memory\n")
> at dumputils.c:1314
> 1314 dumputils.c: A file or directory in the path name does not exist..
> (gdb) bt
> #0 exit_horribly (modulename=0x0, fmt=0x10006a590 "out of memory\n") at dumputils.c:1314
> #1 0x000000010003247c in pg_malloc (size=0) at dumpmem.c:47
> #2 0x0000000100008f54 in getAggregates (fout=0x11000bad0, numAggs=0xffffffffffff73c)
> at pg_dump.c:3614

Oh! Given your previous comment about there not being any user-defined
aggregates, I see what the problem is. AIX must be one of the platforms
where malloc(0) is defined to return NULL rather than a pointer to a
zero-size block. pg_malloc is not coping with that.

A quick fix would be

pg_malloc(size_t size)
{
void *tmp;

tmp = malloc(size);
- if (!tmp)
+ if (!tmp && size)
{
psql_error("out of memory\n");
exit(EXIT_FAILURE);
}

but I'm not sure if that's the best answer overall. Will take it up in
-hackers.

regards, tom lane
Emails aren't always secure, and they may be intercepted or changed
after they've been sent. Produban doesn't accept liability if this
happens. If you think someone may have interfered with this email,
please get in touch with the sender another way. This message and any
documents attached to it do not create or change any contract unless
otherwise specifically stated. Any views or opinions contained in this
message are solely those of the author, and do not necessarily represent
those of Produban, unless otherwise specifically stated and the sender
is authorised to do so. Produban doesn't accept responsibility for
damage caused by any viruses contained in this email or its attachments.
Emails may be monitored. If you've received this email by mistake,
please let the sender know at once that it's gone to the wrong person
and then destroy it without copying, using, or telling anyone about its
contents. Produban Servicios Informaticos Generales, S.L. (UK Branch).
Registered office: Shenley Wood House, Chalkdell Drive, Shenley Wood,
Milton Keynes MK5 6LA. Branch registration number BR 008486.
Ref:[PDB#014]

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Peter Geoghegan 2012-10-01 14:02:47 Re: Postgres error when adding new page
Previous Message Marco Craveiro 2012-10-01 13:47:17 Postgres error when adding new page