Implemented segment merging.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7750 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_segment.c b/exp-drd/drd_segment.c
index 1bb186e..3fbed86 100644
--- a/exp-drd/drd_segment.c
+++ b/exp-drd/drd_segment.c
@@ -188,6 +188,32 @@
}
}
+/** Merge sg1 and sg2 into sg1. */
+void sg_merge(const Segment* const sg1, Segment* const sg2)
+{
+ tl_assert(sg1);
+ tl_assert(sg2);
+
+ if (drd_trace_segment)
+ {
+ char msg[256];
+
+ VG_(snprintf)(msg, sizeof(msg), "Merging segments with vector clocks ");
+ vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ &sg1->vc);
+ VG_(snprintf)(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ " and ");
+ vc_snprint(msg + VG_(strlen)(msg), sizeof(msg) - VG_(strlen)(msg),
+ &sg2->vc);
+ VG_(message)(Vg_UserMsg, "%s", msg);
+ }
+
+ // Keep sg1->stacktrace.
+ // Keep sg1->vc.
+ // Merge sg2->bm into sg1->bm.
+ bm_merge2(sg1->bm, sg2->bm);
+}
+
void sg_print(const Segment* const sg)
{
tl_assert(sg);