From: Holger Hans Peter Freyther <[email protected]> _gst_heap_sbrk/heap_sbrk_internal will return NULL on allocation failures and set errno to ENOMEM but the morecore method assumed that MMAP_FAILED (PTR -1) would be returned. Make it consistent.
This way I can allocate up to 1.4gb of virtual address space until I run into GC scalability issues. --- libgst/ChangeLog | 6 ++++++ libgst/alloc.c | 6 ++++-- libgst/heap.c | 11 +++-------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libgst/ChangeLog b/libgst/ChangeLog index 2ba7b05..1923813 100644 --- a/libgst/ChangeLog +++ b/libgst/ChangeLog @@ -1,3 +1,9 @@ +2012-12-29 Holger Hans Peter Freyther <[email protected]> + + * libgst/alloc.c: _gst_heap_sbrk returns NULL and not MMAP_FAILED + on allocation failure. + * libgst/heap.c: Return NULL on allocation failure. + 2012-09-09 Paolo Bonzini <[email protected]> * libgst/sysdep/posix/events.c: Register the fd with gst diff --git a/libgst/alloc.c b/libgst/alloc.c index 86810d2..cdead03 100644 --- a/libgst/alloc.c +++ b/libgst/alloc.c @@ -671,6 +671,8 @@ heap_system_alloc (heap_data *h, size_t sz) #endif mem = (heap_block *) morecore (sz); + if (!mem) + nomemory(1); mem->mmap_block = 0; mem->size = sz; @@ -700,7 +702,7 @@ morecore (size_t size) { char *ptr = _gst_heap_sbrk (current_heap, size); - if (ptr != (PTR) -1) + if (ptr != NULL) { if (((intptr_t) ptr & (pagesize - 1)) > 0) { @@ -710,7 +712,7 @@ morecore (size_t size) ptr = _gst_heap_sbrk (current_heap, size); } - if (ptr != (PTR) -1) + if (ptr != NULL) return (ptr); } diff --git a/libgst/heap.c b/libgst/heap.c index 1f64fb2..929389f 100644 --- a/libgst/heap.c +++ b/libgst/heap.c @@ -220,14 +220,9 @@ heap_sbrk_internal (struct heap * hdp, { if (hdp->breakval - hdp->base + size > hdp->areasize) { - if (hdp->breakval - hdp->base == hdp->areasize); - { - /* FIXME: a library should never exit! */ - fprintf (stderr, "gst: out of memory allocating %d bytes\n", - size); - exit (1); - } - size = hdp->areasize - (hdp->breakval - hdp->base); + /* this heap is full? */ + errno = ENOMEM; + return NULL; } moveto = PAGE_ALIGN (hdp->breakval + size); -- 1.7.10.4 _______________________________________________ help-smalltalk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-smalltalk
