summaryrefslogtreecommitdiff
path: root/src/topology
diff options
context:
space:
mode:
authorMengdong Lin <mengdong.lin@linux.intel.com>2016-04-07 15:29:01 +0800
committerTakashi Iwai <tiwai@suse.de>2016-04-07 16:57:21 +0200
commit6b31bf8edb407f4c184576909f40c41bdc8439e4 (patch)
tree7254bbe4c4e2f517b9ac18db956dfa3f093178c8 /src/topology
parent374c5fa9c5cb80efa41ef8a3afd215aa48b48436 (diff)
downloadalsa-lib-6b31bf8edb407f4c184576909f40c41bdc8439e4.tar.gz
topology: Define a free handler for the element
This handler is defined for type-specific destruction of an element. Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'src/topology')
-rw-r--r--src/topology/elem.c6
-rw-r--r--src/topology/tplg_local.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/src/topology/elem.c b/src/topology/elem.c
index 00f9eeaf..f2afaafd 100644
--- a/src/topology/elem.c
+++ b/src/topology/elem.c
@@ -83,8 +83,12 @@ void tplg_elem_free(struct tplg_elem *elem)
/* free struct snd_tplg_ object,
* the union pointers share the same address
*/
- if (elem->obj)
+ if (elem->obj) {
+ if (elem->free)
+ elem->free(elem->obj);
+
free(elem->obj);
+ }
free(elem);
}
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
index 4915b1a5..7368a867 100644
--- a/src/topology/tplg_local.h
+++ b/src/topology/tplg_local.h
@@ -127,6 +127,8 @@ struct tplg_elem {
*/
struct list_head ref_list;
struct list_head list; /* list of all elements with same type */
+
+ void (*free)(void *obj);
};
struct map_elem {