]> git.alsa-project.org Git - alsa-lib.git/commitdiff
topology: Fix the missing referenced elem ptr when merging private data
authorMengdong Lin <mengdong.lin@linux.intel.com>
Fri, 22 Jul 2016 05:12:54 +0000 (13:12 +0800)
committerTakashi Iwai <tiwai@suse.de>
Mon, 25 Jul 2016 09:55:35 +0000 (11:55 +0200)
tplg_copy_data() should set the valid referenced data element pointer
on success. The caller will double check this pointer for all kinds of
references, including controls and data.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/topology/data.c

index e81b7f12c70bdee433883aa3d645fe53dc4393fa..59bc97002a21334c0503f1f8e365439a7a119e5c 100644 (file)
@@ -1049,8 +1049,10 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
 
        tplg_dbg("Data '%s' used by '%s'\n", ref->id, elem->id);
        /* overlook empty private data */
-       if (!ref_elem->data || !ref_elem->data->size)
+       if (!ref_elem->data || !ref_elem->data->size) {
+               ref->elem = ref_elem;
                return 0;
+       }
 
        old_priv = get_priv_data(elem);
        if (!old_priv)
@@ -1074,6 +1076,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
        ref_elem->compound_elem = 1;
        memcpy(priv->data + old_priv_data_size,
               ref_elem->data->data, priv_data_size);
+
+       ref->elem = ref_elem;
        return 0;
 }