Обсуждение: 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
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
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