projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix type free memleak
[babeltrace.git]
/
types
/
types.c
diff --git
a/types/types.c
b/types/types.c
index 28242d23c323201106dc49d93775b572b65f0372..675567f8f1819fcb28beb7c52ff911a54606482d 100644
(file)
--- a/
types/types.c
+++ b/
types/types.c
@@
-24,51
+24,39
@@
#include <glib.h>
#include <errno.h>
#include <glib.h>
#include <errno.h>
-struct type_class {
- GQuark qname;
- void (*read)();
- size_t (*write)();
-};
-
-struct type {
- struct type_class *class;
- size_t alignment; /* type alignment, in bits */
- ssize_t len; /* type length, in bits. -1 for dynamic size. */
-};
-
/*
/*
- * Type
class hash table contains the registered type classes. Type class
- *
registration is typically performed by a
plugin.
- * TODO: support plugin unload (unregistration of type
classe
s).
+ * Type
hash table contains the registered types. Type registration is typically
+ *
performed by a type
plugin.
+ * TODO: support plugin unload (unregistration of types).
*/
*/
-GHashTable *type
_classe
s;
+GHashTable *types;
-struct type_class *ctf_lookup_type
_class
(GQuark qname)
+struct type_class *ctf_lookup_type(GQuark qname)
{
return g_hash_table_lookup(type_classes,
(gconstpointer) (unsigned long) qname)
}
{
return g_hash_table_lookup(type_classes,
(gconstpointer) (unsigned long) qname)
}
-int ctf_register_type_class(const char *name,
- void (*read)(),
- void (*write)())
+static void free_type(struct type_class *type_class)
{
{
-
struct type_class tc = g_new(struct type_class, 1
);
- GQuark qname = g_quark_from_string(name);
+
type_class->free(type_class
);
+}
- if (ctf_lookup_type_class(qname))
+int ctf_register_type(struct type_class *type_class)
+{
+ if (ctf_lookup_type_class(type_class->name))
return -EEXIST;
g_hash_table_insert(type_classes,
return -EEXIST;
g_hash_table_insert(type_classes,
- (gconstpointer) (unsigned long)
q
name,
- t
c
);
+ (gconstpointer) (unsigned long)
type_class->
name,
+ t
ype_class
);
return 0;
}
int ctf_init_types(void)
{
type_classes = g_hash_table_new_full(g_direct_hash, g_direct_equal,
return 0;
}
int ctf_init_types(void)
{
type_classes = g_hash_table_new_full(g_direct_hash, g_direct_equal,
- NULL,
g_fre
e);
+ NULL,
free_typ
e);
if (!type_classes)
return -ENOMEM;
return 0;
if (!type_classes)
return -ENOMEM;
return 0;
This page took
0.023657 seconds
and
4
git commands to generate.