Re: pg_upgrade: out of memory - Mailing list pgsql-general

From Carrington, Matthew (Produban)
Subject Re: pg_upgrade: out of memory
Date
Msg-id 53E23B63FBFF3645A2CDD9BE5933C60C8B1194F542@ENTAAP2407P.an.ad.anplc.co.uk
Whole thread Raw
In response to Re: pg_upgrade: out of memory  (Tom Lane <tgl@sss.pgh.pa.us>)
List 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@sss.pgh.pa.us]
Sent: 01 October 2012 14:39
To: Carrington, Matthew (Produban)
Cc: pgsql-general@postgresql.org
Subject: Re: [GENERAL] pg_upgrade: out of memory

"Carrington, Matthew (Produban)" <Matthew.Carrington@produban.co.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]



pgsql-general by date:

Previous
From: Marco Craveiro
Date:
Subject: Postgres error when adding new page
Next
From: Peter Geoghegan
Date:
Subject: Re: Postgres error when adding new page