use realloc instead

This commit is contained in:
Dan Halbert 2020-02-21 17:36:15 -05:00
parent 9e6a9e46da
commit f63b2c0d0c
1 changed files with 6 additions and 3 deletions

View File

@ -150,18 +150,21 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
if (MP_STATE_VM(pixels_pattern_heap)) { if (MP_STATE_VM(pixels_pattern_heap)) {
// Old pixels_pattern_heap will be gc'd; don't free it. // Old pixels_pattern_heap will be gc'd; don't free it.
pixels_pattern = NULL; pixels_pattern = NULL;
MP_STATE_VM(pixels_pattern_heap) = NULL;
pixels_pattern_heap_size = 0; pixels_pattern_heap_size = 0;
} }
// realloc routines fall back to a plain malloc if the incoming ptr is NULL.
if (sd_en) { if (sd_en) {
// If the soft device is enabled then we must use PWM to // If the soft device is enabled then we must use PWM to
// transmit. This takes a bunch of memory to do so raise an // transmit. This takes a bunch of memory to do so raise an
// exception if we can't. // exception if we can't.
MP_STATE_VM(pixels_pattern_heap) = (uint16_t *) m_malloc(pattern_size, false); MP_STATE_VM(pixels_pattern_heap) =
(uint16_t *) m_realloc(MP_STATE_VM(pixels_pattern_heap), pattern_size);
} else { } else {
// Might return NULL. // Might return NULL.
MP_STATE_VM(pixels_pattern_heap) = (uint16_t *) m_malloc_maybe(pattern_size, false); MP_STATE_VM(pixels_pattern_heap) =
// true means move if necessary.
(uint16_t *) m_realloc_maybe(MP_STATE_VM(pixels_pattern_heap), pattern_size, true);
} }
if (MP_STATE_VM(pixels_pattern_heap)) { if (MP_STATE_VM(pixels_pattern_heap)) {
pixels_pattern_heap_size = pattern_size; pixels_pattern_heap_size = pattern_size;