Improve GC finalisation code; add option to disable it.

This commit is contained in:
Damien George
2014-04-05 20:35:48 +01:00
parent 8123a3339d
commit 12bab72d93
12 changed files with 135 additions and 58 deletions

View File

@@ -30,8 +30,8 @@ STATIC int peak_bytes_allocated = 0;
#undef malloc
#undef free
#undef realloc
#define malloc gc_alloc
#define malloc_mp_obj gc_alloc_mp_obj
#define malloc(b) gc_alloc((b), false)
#define malloc_with_finaliser(b) gc_alloc((b), true)
#define free gc_free
#define realloc gc_realloc
#endif // MICROPY_ENABLE_GC
@@ -53,14 +53,14 @@ void *m_malloc(int num_bytes) {
return ptr;
}
void *m_malloc_mp_obj(int num_bytes) {
#if MICROPY_ENABLE_FINALISER
void *m_malloc_with_finaliser(int num_bytes) {
if (num_bytes == 0) {
return NULL;
}
void *ptr = malloc_mp_obj(num_bytes);
void *ptr = malloc_with_finaliser(num_bytes);
if (ptr == NULL) {
printf("could not allocate memory, allocating %d bytes\n", num_bytes);
return NULL;
return m_malloc_fail(num_bytes);
}
#if MICROPY_MEM_STATS
total_bytes_allocated += num_bytes;
@@ -70,6 +70,7 @@ void *m_malloc_mp_obj(int num_bytes) {
DEBUG_printf("malloc %d : %p\n", num_bytes, ptr);
return ptr;
}
#endif
void *m_malloc0(int num_bytes) {
void *ptr = m_malloc(num_bytes);