Обсуждение: Memory management, palloc

Поиск
Список
Период
Сортировка

Memory management, palloc

От
Gavin Sherry
Дата:
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



Re: Memory management, palloc

От
Karel Zak
Дата:
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@zf.jcu.cz>http://home.zf.jcu.cz/~zakkr/C, PostgreSQL, PHP, WWW, http://docs.linux.cz,
http://mape.jcu.cz


Re: Memory management, palloc

От
Gavin Sherry
Дата:
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



Re: Memory management, palloc

От
Tom Lane
Дата:
Gavin Sherry <swm@linuxworld.com.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