Memory management, palloc
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
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
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
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