drd: Use macros and inline functions for list manipulation
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12353 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_segment.c b/drd/drd_segment.c
index c3f8d31..40db038 100644
--- a/drd/drd_segment.c
+++ b/drd/drd_segment.c
@@ -34,6 +34,11 @@
#include "pub_tool_threadstate.h" // VG_INVALID_THREADID
+/* Global variables. */
+
+struct list_head DRD_(g_sg_list) = LIST_HEAD_INIT(DRD_(g_sg_list));
+
+
/* Local variables. */
static ULong s_segment_merge_count;
@@ -68,8 +73,10 @@
creator_sg = (creator != DRD_INVALID_THREADID
? DRD_(thread_get_segment)(creator) : 0);
- sg->next = 0;
- sg->prev = 0;
+ sg->g_list.next = NULL;
+ sg->g_list.prev = NULL;
+ sg->thr_list.next = NULL;
+ sg->thr_list.prev = NULL;
sg->tid = created;
sg->refcnt = 1;
@@ -119,6 +126,7 @@
sg = VG_(malloc)("drd.segment.sn.1", sizeof(*sg));
tl_assert(sg);
sg_init(sg, creator, created);
+ list_add(&sg->g_list, &DRD_(g_sg_list));
return sg;
}
@@ -137,6 +145,7 @@
s_segments_alive_count--;
tl_assert(sg);
+ list_del(&sg->g_list);
DRD_(sg_cleanup)(sg);
VG_(free)(sg);
}