diff --git a/gdb-port/parser.py b/gdb-port/parser.py index cbc97e60bc4bf81d3d7e4dd5142f3ea9001e876a..5c10d080415d47575c053fea6c738c5a255f76cd 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -148,10 +148,9 @@ class ParserStack: # TODO: where should commit_at_push() be called? HDoParseBreakpoint determines whether to stop, which ParserStack doesn't know about. could be a bool parameter to push() if should_commit: allocs = self.commit_at_push() - pending_allocs = self.pending_allocs.get(self.arena_int, {}) - for addr, alloc in allocs.items(): - pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc - self.pending_allocs[self.arena_int] = pending_allocs + for parser, allocs_by_arena in allocs.items(): + updated_allocs = { k : v + allocs_by_arena.get(self.arena_int, 0) for k,v in self.pending_allocs.get(parser, {}).items() } + self.pending_allocs[parser] = allocs_by_arena | updated_allocs def pop(self): parser_obj = self.peek() @@ -163,11 +162,10 @@ class ParserStack: self.stack_events.append((StackEvent.POP, int(self.parse_state_gdbval['arena']['arena_malloc_bytes']), parser_obj)) allocs = self.commit_at_pop() - pending_allocs = self.pending_allocs.get(self.arena_int, {}) # TODO: where do we commit unclaimed allocs in a parserstack? - for addr, alloc in allocs.items(): - pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc - self.pending_allocs[self.arena_int] = pending_allocs + for parser, allocs_by_arena in allocs.items(): + updated_allocs = { k : v + allocs_by_arena.get(self.arena_int, 0) for k,v in self.pending_allocs.get(parser, {}).items() } + self.pending_allocs[parser] = allocs_by_arena | updated_allocs #print("adding mem use: parser:", str(parser_obj), "arena:", hex(int(self.arena)), "bytes:", allocated_bytes) # DEBUG #print("adding mem use (alternate): parser:", str(parser_obj), "arena:", hex(int(self.arena)), "bytes:", allocs) # DEBUG #parser_obj.add_mem_use(int(self.arena), allocs)