diff --git a/gdb-port/parser.py b/gdb-port/parser.py index e6774d0a17a094b34582acce3486b2607dc9930e..bc5d24be33e326c45d027e752fa3b8819dc8e681 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -148,8 +148,10 @@ 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(): - self.pending_allocs[self.arena_int][addr] = self.pending_allocs[self.arena_int].get(addr, 0) + alloc + pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc + self.pending_allocs[self.arena_int] = pending_allocs def pop(self): parser_obj = self.peek() @@ -161,9 +163,11 @@ class ParserStack: self.stack_events.append((StackEvent.POP, int(self.parse_state_gdbval['arena']['arena_malloc_bytes']), parser_obj)) allocs = self.commit_at_pop() + penting_allocs = self.pending_allocs.get(self.arena_int, {}) # TODO: where do we commit unclaimed allocs in a parserstack? for addr, alloc in allocs.items(): - self.pending_allocs[self.arena_int][addr] = self.pending_allocs[self.arena_int].get(addr, 0) + alloc + pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc + self.pending_allocs[self.arena_int] = pending_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) @@ -314,9 +318,9 @@ class ParserStack: #print("commit_at_pop: pop_allocs:", pop_allocs) # DEBUG self.unclaimed_mem_use += pop_allocs.pop(0,0) # Account for allocs and remove with no parser, so it doesn't cause problems in the loop below - for parser_addr, alloc in pop_allocs.items(): - #top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc) - parser_cache[parser_addr].add_mem_use(self.arena_int, alloc) + #for parser_addr, alloc in pop_allocs.items(): + ##top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc) + #parser_cache[parser_addr].add_mem_use(self.arena_int, alloc) self.committed = len(self.stack_events)-1 return pop_allocs