diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-01 04:09:27 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-01 04:09:27 -0700 |
| commit | 7c2f68862ea9cc58f62cbe2b87b4c4dc2b0294f5 (patch) | |
| tree | 3453d1e298e96335708fa75d2e737546357374a9 | |
| parent | 57cf264420acb625f4614353a088eb5b884f9c44 (diff) | |
| parent | c7ff1bd88150c8f61f7483ea857f198ca1992fc7 (diff) | |
| download | mruby-7c2f68862ea9cc58f62cbe2b87b4c4dc2b0294f5.tar.gz mruby-7c2f68862ea9cc58f62cbe2b87b4c4dc2b0294f5.zip | |
Merge pull request #1121 from monaka/pr-check-malloc-failed2
Check malloc failed
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | src/gc.c | 14 |
2 files changed, 15 insertions, 0 deletions
diff --git a/include/mruby.h b/include/mruby.h index e204820a3..5272d0400 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -125,6 +125,7 @@ typedef struct mrb_state { mrb_bool gc_disabled:1; mrb_bool gc_full:1; mrb_bool is_generational_gc_mode:1; + mrb_bool out_of_memory:1; size_t majorgc_old_threshold; struct alloca_header *mems; @@ -157,6 +157,20 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) mrb_garbage_collect(mrb); p2 = (mrb->allocf)(mrb, p, len, mrb->ud); } + + if (!p2 && len) { + if (mrb->out_of_memory) { + /* mrb_panic(mrb); */ + } + else { + mrb->out_of_memory = 1; + mrb_raise(mrb, E_RUNTIME_ERROR, "Out of memory"); + } + } + else { + mrb->out_of_memory = 0; + } + return p2; } |
