Improve GC finalisation code; add option to disable it.
This commit is contained in:
13
py/malloc.c
13
py/malloc.c
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user