kopia lustrzana https://github.com/micropython/micropython
py/parse: Use m_renew_maybe to ensure that memory is shrunk in-place.
The chunks of memory that the parser allocates contain parse nodes and are pointed to from many places, so these chunks cannot be relocated by the memory manager. This patch makes it so that when a chunk is shrunk to fit, it is not relocated.pull/1839/head
rodzic
add930c4b5
commit
d6c558c0aa
|
@ -166,8 +166,8 @@ STATIC void *parser_alloc(parser_t *parser, size_t num_bytes) {
|
|||
sizeof(mp_parse_chunk_t) + chunk->alloc + num_bytes, false);
|
||||
if (new_data == NULL) {
|
||||
// could not grow existing memory; shrink it to fit previous
|
||||
(void)m_renew(byte, chunk, sizeof(mp_parse_chunk_t) + chunk->alloc,
|
||||
sizeof(mp_parse_chunk_t) + chunk->union_.used);
|
||||
(void)m_renew_maybe(byte, chunk, sizeof(mp_parse_chunk_t) + chunk->alloc,
|
||||
sizeof(mp_parse_chunk_t) + chunk->union_.used, false);
|
||||
chunk->alloc = chunk->union_.used;
|
||||
chunk->union_.next = parser->tree.chunk;
|
||||
parser->tree.chunk = chunk;
|
||||
|
|
Ładowanie…
Reference in New Issue