loci: remove object tracking
This feature was flawed and not widely used. Valgrind is a better alternative.
diff --git a/c_gen/c_code_gen.py b/c_gen/c_code_gen.py
index ca75e2f..d734032 100644
--- a/c_gen/c_code_gen.py
+++ b/c_gen/c_code_gen.py
@@ -2130,7 +2130,7 @@
*/
%(cls)s_t *
-%(cls)s_new_(of_version_t version)
+%(cls)s_new(of_version_t version)
{
%(cls)s_t *obj;
int bytes;
@@ -2165,25 +2165,6 @@
out.write("""
return obj;
}
-
-#if defined(OF_OBJECT_TRACKING)
-
-/*
- * Tracking objects. Call the new function and then record location
- */
-
-%(cls)s_t *
-%(cls)s_new_tracking(of_version_t version,
- const char *file, int line)
-{
- %(cls)s_t *obj;
-
- obj = %(cls)s_new_(version);
- of_object_track((of_object_t *)obj, file, line);
-
- return obj;
-}
-#endif
""" % dict(cls=cls))
@@ -2204,7 +2185,7 @@
*/
%(cls)s_t *
-%(cls)s_new_from_message_(of_message_t msg)
+%(cls)s_new_from_message(of_message_t msg)
{
%(cls)s_t *obj = NULL;
of_version_t version;
@@ -2233,25 +2214,6 @@
return obj;
}
-
-#if defined(OF_OBJECT_TRACKING)
-
-/*
- * Tracking objects. Call the new function and then record location
- */
-
-%(cls)s_t *
-%(cls)s_new_from_message_tracking(of_message_t msg,
- const char *file, int line)
-{
- %(cls)s_t *obj;
-
- obj = %(cls)s_new_from_message_(msg);
- of_object_track((of_object_t *)obj, file, line);
-
- return obj;
-}
-#endif
""" % dict(cls=cls))
@@ -2281,58 +2243,15 @@
*
****************************************************************/
""")
- out.write("""
-/*
- * If object tracking is enabled, map "new" and "new from msg"
- * calls to tracking versions; otherwise, directly to internal
- * versions of fns which have the same name but end in _.
- */
-
-#if defined(OF_OBJECT_TRACKING)
-""")
- for cls in of_g.standard_class_order:
- out.write("""
-extern %(cls)s_t *
- %(cls)s_new_tracking(of_version_t version,
- const char *file, int line);
-#define %(cls)s_new(version) \\
- %(cls)s_new_tracking(version, \\
- __FILE__, __LINE__)
-""" % dict(cls=cls))
- if loxi_utils.class_is_message(cls):
- out.write("""extern %(cls)s_t *
- %(cls)s_new_from_message_tracking(of_message_t msg,
- const char *file, int line);
-#define %(cls)s_new_from_message(msg) \\
- %(cls)s_new_from_message_tracking(msg, \\
- __FILE__, __LINE__)
-""" % dict(cls=cls))
-
- out.write("""
-#else /* No object tracking */
-""")
- for cls in of_g.standard_class_order:
- out.write("""
-#define %(cls)s_new(version) \\
- %(cls)s_new_(version)
-""" % dict(cls=cls))
- if loxi_utils.class_is_message(cls):
- out.write("""#define %(cls)s_new_from_message(msg) \\
- %(cls)s_new_from_message_(msg)
-""" % dict(cls=cls))
-
- out.write("""
-#endif /* Object tracking */
-""")
for cls in of_g.standard_class_order:
out.write("""
extern %(cls)s_t *
- %(cls)s_new_(of_version_t version);
+ %(cls)s_new(of_version_t version);
""" % dict(cls=cls))
if loxi_utils.class_is_message(cls):
out.write("""extern %(cls)s_t *
- %(cls)s_new_from_message_(of_message_t msg);
+ %(cls)s_new_from_message(of_message_t msg);
""" % dict(cls=cls))
out.write("""extern void %(cls)s_init(
%(cls)s_t *obj, of_version_t version, int bytes, int clean_wire);
diff --git a/c_gen/templates/of_object.c b/c_gen/templates/of_object.c
index a328b3e..cf19e20 100644
--- a/c_gen/templates/of_object.c
+++ b/c_gen/templates/of_object.c
@@ -39,17 +39,6 @@
#include <loci/loci.h>
#include <loci/loci_validator.h>
-#if defined(OF_OBJECT_TRACKING)
-#include <BigList/biglist.h>
-
-loci_object_track_t loci_global_tracking;
-
-#define TRACK (&loci_global_tracking)
-#define TRACK_OBJS (TRACK->objects)
-#define CHECK_MAX(val, max) if ((val) > (max)) (max) = (val)
-
-#endif
-
/**
* Create a generic new object and possibly underlying wire buffer
* @param bytes The number of bytes to allocate in the underlying buffer
@@ -98,20 +87,6 @@
return;
}
-#if defined(OF_OBJECT_TRACKING)
- ASSERT(obj->track_info.magic == OF_OBJECT_TRACKING_MAGIC &&
- "of_object double free?");
- LOCI_LOG_TRACE("OF obj delete %p. Wire buf %p.\n", obj,
- obj->wire_object.wbuf);
- ASSERT(TRACK->count_current > 0);
- TRACK->count_current -= 1;
- TRACK->deletes += 1;
-
- TRACK_OBJS = biglist_remove_link_free(TRACK_OBJS,
- obj->track_info.bl_entry);
- obj->track_info.magic = 0;
-#endif
-
/*
* Make callback if present
*/
@@ -134,7 +109,7 @@
*/
of_object_t *
-of_object_dup_(of_object_t *src)
+of_object_dup(of_object_t *src)
{
of_object_t *dst;
of_object_init_f init_fn;
@@ -163,107 +138,6 @@
return dst;
}
-#if defined(OF_OBJECT_TRACKING)
-
-/**
- * Record an object for tracking
- *
- * @param obj The object being tracked
- * @param file The file name where the allocation is happening
- * @param line The line number in the file where the alloc is happening
- */
-
-void
-of_object_track(of_object_t *obj, const char *file, int line)
-{
- if (obj != NULL) {
- LOCI_LOG_TRACE("OF obj track %p, wire buf %p\n%s:%d\\n",
- obj, obj->wire_object.wbuf, file, line);
- obj->track_info.file = file;
- obj->track_info.line = line;
- TRACK_OBJS = biglist_prepend(TRACK_OBJS, (void *)obj);
- obj->track_info.bl_entry = TRACK_OBJS;
- obj->track_info.magic = OF_OBJECT_TRACKING_MAGIC;
-
- TRACK->allocs += 1;
- TRACK->count_current += 1;
- CHECK_MAX(TRACK->count_current, TRACK->count_max);
- }
-}
-
-/**
- * The dup function when tracking is enabled
- */
-
-of_object_t *
-of_object_dup_tracking(of_object_t *src, const char *file, int line)
-{
- of_object_t *obj;
-
- obj = of_object_dup_(src);
- of_object_track(obj, file, line);
-
- return obj;
-}
-
-/**
- * Display track info for one object
- */
-
-void
-of_object_track_output(of_object_t *obj, loci_writer_f writer, void* cookie)
-{
- const char *offset;
- static const char *unknown = "Unknown file";
-
- if (obj->track_info.file) {
- offset = strstr(obj->track_info.file, "Modules/");
- if (offset == NULL) {
- offset = obj->track_info.file;
- } else {
- offset += 8; /* Jump over Modules/ too */
- }
- } else {
- offset = unknown;
- }
- writer(cookie, "obj %p. type %s.\n%s:%d\n",
- obj, of_object_id_str[obj->object_id],
- offset, obj->track_info.line);
-}
-
-/**
- * Dump out the current object list from LOCI
- *
- * @param log_fn The output printf vector
- *
- */
-
-void
-of_object_track_report(loci_writer_f writer, void* cookie)
-{
- biglist_t *elt;
- of_object_t *obj;
- int count = 0;
-
- writer(cookie, "\nLOCI Outstanding object list.\n");
- writer(cookie, "Objs: Current %d. Max %d. Created %d. Deleted %d\n",
- TRACK->count_current, TRACK->count_max, TRACK->allocs,
- TRACK->deletes);
- if (TRACK_OBJS) {
- BIGLIST_FOREACH_DATA(elt, TRACK_OBJS, of_object_t *, obj) {
- of_object_track_output(obj, writer, cookie);
- ++count;
- }
- }
- if (count != TRACK->count_current) {
- writer(cookie, "\nERROR: List has %d, but track count is %d\n",
- count, TRACK->count_current);
- }
- writer(cookie, "\nEnd of outstanding object list\n");
-}
-
-#endif
-
/**
* Generic new from message call
*/
@@ -302,11 +176,6 @@
obj->length = len;
obj->version = version;
-#if defined(OF_OBJECT_TRACKING)
- /* @FIXME Would be nice to get caller; for now only in cxn_instance */
- of_object_track(obj, __FILE__, __LINE__);
-#endif
-
return obj;
}
diff --git a/c_gen/templates/of_object.h b/c_gen/templates/of_object.h
index a85e33e..0e761fd 100644
--- a/c_gen/templates/of_object.h
+++ b/c_gen/templates/of_object.h
@@ -48,10 +48,6 @@
#include <loci/of_message.h>
#include <loci/of_wire_buf.h>
-#if defined(OF_OBJECT_TRACKING)
-#include <BigList/biglist.h>
-#endif
-
/**
* This is the number of bytes reserved for metadata in each
* of_object_t instance.
@@ -93,79 +89,18 @@
extern int of_list_append(of_object_t *list, of_object_t *item);
extern of_object_t *of_object_new(int bytes);
-extern of_object_t * of_object_dup_(of_object_t *src);
+extern of_object_t *of_object_dup(of_object_t *src);
/**
* Callback function prototype for deleting an object
*/
typedef void (*of_object_delete_callback_f)(of_object_t *obj);
-#if defined(OF_OBJECT_TRACKING)
-/**
- * When tracking is enabled, the location of each new or dup
- * call of an OF object is recorded and a list is kept of all
- * outstanding objects.
- *
- * This dovetails with using objects to track outstanding operations
- * for barrier processing.
- */
-
-/**
- * Global tracking stats
- */
-typedef struct loci_object_track_s {
- biglist_t *objects;
- int count_current;
- uint32_t count_max;
- uint32_t allocs;
- uint32_t deletes;
-} loci_object_track_t;
-
-extern loci_object_track_t loci_global_tracking;
-
-/* Remap dup call to tracking */
-extern of_object_t * of_object_dup_tracking(of_object_t *src,
- const char *file, int line);
-#define of_object_dup(src) of_object_dup_tracking(src, __FILE__, __LINE__)
-extern void of_object_track(of_object_t *obj, const char *file, int line);
-
-extern void of_object_track_output(of_object_t *obj, loci_writer_f writer, void* cookie);
-extern void of_object_track_report(loci_writer_f writer, void* cookie);
-
-/**
- * The data stored in each object related to tracking and
- * The LOCI client may install a delete callback function to allow
- * the notification of an object's destruction.
- */
-
-typedef struct of_object_track_info_s {
- of_object_delete_callback_f delete_cb; /* To be implemented */
- void *delete_cookie;
-
- /* Track file and line where allocated */
- const char *file;
- int line;
- biglist_t *bl_entry; /* Pointer to self */
- uint32_t magic; /* validation value */
-} of_object_track_info_t;
-
-#define OF_OBJECT_TRACKING_MAGIC 0x11235813
-#else
-
-/* Use native dup call */
-#define of_object_dup of_object_dup_
-
-/**
- * When tracking is not enabled, we still support a delete callback
- */
-
typedef struct of_object_track_info_s {
of_object_delete_callback_f delete_cb; /* To be implemented */
void *delete_cookie;
} of_object_track_info_t;
-#endif
-
extern int of_object_xid_set(of_object_t *obj, uint32_t xid);
extern int of_object_xid_get(of_object_t *obj, uint32_t *xid);