summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emualloc.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2010-06-25 05:11:42 +0000
committer Aaron Giles <aaron@aarongiles.com>2010-06-25 05:11:42 +0000
commit29b6b0de4167319a4f64ee95ecc5f18ba3fdf923 (patch)
treea408b4561c3d622c98e267e9a8a269390e0210ba /src/emu/emualloc.c
parent1c9abccb20fc25c928990ef050bce82efac99cc8 (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.c19
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);