Re: Memory management, palloc

Lists: pgsql-hackers
From: Gavin Sherry <swm(at)linuxworld(dot)com(dot)au>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Memory management, palloc
Date: 2001-03-08 11:28:50
Message-ID: Pine.LNX.4.21.0103082204580.9685-100000@linuxworld.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Hi guys,

I've been looking through the memory management system today.

When a request is made for a memory memory chunk larger than
ALLOC_CHUNK_LIMIT, AllocSetAlloc() uses malloc() to give the request its
own block. The result is tested by AllocSetAlloc() to see if the memory
was allocated.

Irrespective of this, a chunk can be returned which has not had memory
allocated to it. There is no testing of the return status of
palloc() through out the code.

Was/has this been addressed?

Thanks

Gavin


From: Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
To: Gavin Sherry <swm(at)linuxworld(dot)com(dot)au>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Memory management, palloc
Date: 2001-03-08 14:54:29
Message-ID: 20010308155429.A11790@ara.zf.jcu.cz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Thu, Mar 08, 2001 at 10:28:50PM +1100, Gavin Sherry wrote:
> Hi guys,
>
> I've been looking through the memory management system today.
>
> When a request is made for a memory memory chunk larger than
> ALLOC_CHUNK_LIMIT, AllocSetAlloc() uses malloc() to give the request its
> own block. The result is tested by AllocSetAlloc() to see if the memory
> was allocated.
>
> Irrespective of this, a chunk can be returned which has not had memory
> allocated to it. There is no testing of the return status of
> palloc() through out the code.

I don't understand. If some memory is not obtain in AllocSetAlloc()
all finish with elog(ERROR). Not exists way how return insufficient
space. Or not?

Karel

--
Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
http://home.zf.jcu.cz/~zakkr/

C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Gavin Sherry <swm(at)linuxworld(dot)com(dot)au>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Memory management, palloc
Date: 2001-03-08 15:14:12
Message-ID: 25596.984064452@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Gavin Sherry <swm(at)linuxworld(dot)com(dot)au> writes:
> I've been looking through the memory management system today.

> When a request is made for a memory memory chunk larger than
> ALLOC_CHUNK_LIMIT, AllocSetAlloc() uses malloc() to give the request its
> own block. The result is tested by AllocSetAlloc() to see if the memory
> was allocated.

> Irrespective of this, a chunk can be returned which has not had memory
> allocated to it. There is no testing of the return status of
> palloc() through out the code.

What's your point?

palloc() does not have the same specification as malloc. It guarantees
to return allocated memory, or elog trying.

regards, tom lane


From: Gavin Sherry <swm(at)linuxworld(dot)com(dot)au>
To: Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Memory management, palloc
Date: 2001-03-08 15:19:14
Message-ID: Pine.LNX.4.21.0103090218390.11367-100000@linuxworld.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Karel,

On Thu, 8 Mar 2001, Karel Zak wrote:

> On Thu, Mar 08, 2001 at 10:28:50PM +1100, Gavin Sherry wrote:
> > Hi guys,
> >
> > I've been looking through the memory management system today.
> >
> > When a request is made for a memory memory chunk larger than
> > ALLOC_CHUNK_LIMIT, AllocSetAlloc() uses malloc() to give the request its
> > own block. The result is tested by AllocSetAlloc() to see if the memory
> > was allocated.
> >
> > Irrespective of this, a chunk can be returned which has not had memory
> > allocated to it. There is no testing of the return status of
> > palloc() through out the code.
>
> I don't understand. If some memory is not obtain in AllocSetAlloc()
> all finish with elog(ERROR). Not exists way how return insufficient
> space. Or not?

Ahh. Of course. My mistake =)

Gavin