From 3ceeb0be95874fe867f25004618c31ca8e23ecf4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 25 Jun 2013 15:38:28 +0900 Subject: add mrb_malloc_simple() that returns NULL on error --- src/gc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/gc.c') diff --git a/src/gc.c b/src/gc.c index 3e33c052c..7eee61dc1 100644 --- a/src/gc.c +++ b/src/gc.c @@ -182,6 +182,19 @@ mrb_malloc(mrb_state *mrb, size_t len) return mrb_realloc(mrb, 0, len); } +void* +mrb_malloc_simple(mrb_state *mrb, size_t len) +{ + void *p2; + + p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); + if (!p2 && len > 0 && mrb->heaps) { + mrb_garbage_collect(mrb); + p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); + } + return p2; +} + void* mrb_calloc(mrb_state *mrb, size_t nelem, size_t len) { -- cgit v1.2.3 From 68f31e94f564c48d8677acc8acf3ba46deebf94f Mon Sep 17 00:00:00 2001 From: fleuria Date: Fri, 28 Jun 2013 22:58:19 +0800 Subject: refactor mrb_realloc() remove the redundant codes with mrb_malloc_simple() --- include/mruby.h | 1 + src/gc.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) (limited to 'src/gc.c') diff --git a/include/mruby.h b/include/mruby.h index 29d13c553..568ed4876 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -242,6 +242,7 @@ mrb_sym mrb_intern(mrb_state *mrb,const char *cstr) void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */ void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */ void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */ +void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */ void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */ struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*); void mrb_free(mrb_state*, void*); diff --git a/src/gc.c b/src/gc.c index 7eee61dc1..6fc400e32 100644 --- a/src/gc.c +++ b/src/gc.c @@ -148,18 +148,28 @@ gettimeofday_time(void) #define GC_STEP_SIZE 1024 + void* -mrb_realloc(mrb_state *mrb, void *p, size_t len) +mrb_realloc_simple(mrb_state *mrb, void *p, size_t len) { void *p2; p2 = (mrb->allocf)(mrb, p, len, mrb->ud); - if (!p2 && len > 0 && mrb->heaps) { mrb_garbage_collect(mrb); p2 = (mrb->allocf)(mrb, p, len, mrb->ud); } + return p2; +} + + +void* +mrb_realloc(mrb_state *mrb, void *p, size_t len) +{ + void *p2; + + p2 = mrb_realloc_simple(mrb, p, len); if (!p2 && len) { if (mrb->out_of_memory) { /* mrb_panic(mrb); */ @@ -185,14 +195,7 @@ mrb_malloc(mrb_state *mrb, size_t len) void* mrb_malloc_simple(mrb_state *mrb, size_t len) { - void *p2; - - p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); - if (!p2 && len > 0 && mrb->heaps) { - mrb_garbage_collect(mrb); - p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); - } - return p2; + return mrb_realloc_simple(mrb, 0, len); } void* -- cgit v1.2.3 From d8c4ce8f49ec491488a05881850e23611446387d Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 1 Jul 2013 07:03:21 -0400 Subject: Fix unsigned/signed warning. --- src/gc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/gc.c') diff --git a/src/gc.c b/src/gc.c index 6fc400e32..2be387e79 100644 --- a/src/gc.c +++ b/src/gc.c @@ -630,8 +630,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj) static void root_scan_phase(mrb_state *mrb) { - int j; - size_t i, e; + size_t i, e, j; if (!is_minor_gc(mrb)) { mrb->gray_list = 0; -- cgit v1.2.3 From 3c197f6ab1e091982ead76346e0335bfacf3adb7 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 1 Jul 2013 22:00:08 +0900 Subject: Refactor mrb_realloc() func in gc.c. --- src/gc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gc.c') diff --git a/src/gc.c b/src/gc.c index 6fc400e32..dcbfaa890 100644 --- a/src/gc.c +++ b/src/gc.c @@ -175,12 +175,12 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) /* mrb_panic(mrb); */ } else { - mrb->out_of_memory = 1; + mrb->out_of_memory = TRUE; mrb_raise(mrb, E_RUNTIME_ERROR, "Out of memory"); } } else { - mrb->out_of_memory = 0; + mrb->out_of_memory = FALSE; } return p2; -- cgit v1.2.3