diff options
author | 2010-06-25 05:11:42 +0000 | |
---|---|---|
committer | 2010-06-25 05:11:42 +0000 | |
commit | 29b6b0de4167319a4f64ee95ecc5f18ba3fdf923 (patch) | |
tree | a408b4561c3d622c98e267e9a8a269390e0210ba /src/emu/emualloc.c | |
parent | 1c9abccb20fc25c928990ef050bce82efac99cc8 (diff) |
C++-ified the debugger views. Not quite architecturally where I would
like them, but it's a start. Split implementation of individual view
types out to separate files. Updated all callers.
Also:
* fixed okim6295 memory view
* changed emualloc to free resource pools from earliest to latest
so that early objects can safely clean up stuff they allocated
Diffstat (limited to 'src/emu/emualloc.c')
-rw-r--r-- | src/emu/emualloc.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/emu/emualloc.c b/src/emu/emualloc.c index 15b0663e0e6..49ab8801b22 100644 --- a/src/emu/emualloc.c +++ b/src/emu/emualloc.c @@ -203,7 +203,8 @@ void dump_unfreed_mem(void) resource_pool::resource_pool() : m_listlock(osd_lock_alloc()), - m_ordered_head(NULL) + m_ordered_head(NULL), + m_ordered_tail(NULL) { memset(m_hash, 0, sizeof(m_hash)); } @@ -237,10 +238,13 @@ void resource_pool::add(resource_pool_item &item) m_hash[hashval] = &item; // insert into ordered list - item.m_ordered_next = m_ordered_head; - if (m_ordered_head != NULL) - m_ordered_head->m_ordered_prev = &item; - m_ordered_head = &item; + item.m_ordered_next = NULL; + item.m_ordered_prev = m_ordered_tail; + if (m_ordered_tail != NULL) + m_ordered_tail->m_ordered_next = &item; + m_ordered_tail = &item; + if (m_ordered_head == NULL) + m_ordered_head = &item; osd_lock_release(m_listlock); } @@ -277,6 +281,8 @@ void resource_pool::remove(void *ptr) m_ordered_head = deleteme->m_ordered_next; if (deleteme->m_ordered_next != NULL) deleteme->m_ordered_next->m_ordered_prev = deleteme->m_ordered_prev; + else + m_ordered_tail = deleteme->m_ordered_prev; // delete the object and break delete deleteme; @@ -346,7 +352,8 @@ void resource_pool::clear() { osd_lock_acquire(m_listlock); - // important: delete in reverse order of adding + // important: delete from earliest to latest; this allows objects to clean up after + // themselves if they wish while (m_ordered_head != NULL) remove(m_ordered_head->m_ptr); |