etcp: фикс double-free буферов паковщика и повторных free после неудачного queue_data_put
- pn_send_to_etcp/pn_unpacker_cb: занулять pn->data/pn->recvpart ДО queue_data_put (ре-энтрантный close/reinit в синхронной цепочке освобождал буфер повторно) - etcp_output_try_assembly: гард state==2/reinit_pending + убрать re-put освобождённого entry - etcp_conn_input: гард ре-энтрантного reinit/close в цикле секций, локальный etcp вместо pkt->link - убраны повторные free после queue_data_put (он сам освобождает entry+dgram) в 6 местах - диагностика: obj=%p в DOUBLE FREE, логи free dgram в pn_deinit/ack_recv
This commit is contained in:
1 parent
4a785772be
commit
841b3042cf
7 files changed
+39
-26
No files matched your search
+2
-2
@@ -39,9 +39,9 @@ static void pool_check_and_clear_tags(struct memory_pool* pool, void* obj, const
|
||||
while (_halt) {}
|
||||
}
|
||||
if (*counter == 0) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_SYS, "pool_free DOUBLE FREE pool=%p name=%s sz=%zu allocs=%zu reuse=%zu alloc=%s free=%s",
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_SYS, "pool_free DOUBLE FREE pool=%p name=%s sz=%zu allocs=%zu reuse=%zu obj=%p alloc=%s free=%s",
|
||||
pool, pool->name ? pool->name : "?", pool->object_size, pool->allocations, pool->reuse_count,
|
||||
*loc ? *loc : "(null)", location);
|
||||
obj, *loc ? *loc : "(null)", location);
|
||||
volatile int _halt = 1;
|
||||
while (_halt) {}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user