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(at)zf(dot)jcu(dot)cz> http://home.zf.jcu.cz/~zakkr/ C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz
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
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