summary refs log tree commit diff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-04-14 16:13:58 +0200
committerTakashi Iwai <tiwai@suse.de>2009-04-14 16:15:09 +0200
commit9d59065cd6fae841ca56c281189d5b8d0817d35f (patch)
treeab9ab1d52db96d7ba7a5235ea0073a34b722a1e0
parent577c9c456f0e1371cbade38eaf91ae8e8a308555 (diff)
downloadlinux-9d59065cd6fae841ca56c281189d5b8d0817d35f.tar.gz
ALSA: add private_data to struct snd_jack
Added private_data and private_free fields to struct snd_jack so that
the caller can assign the data.  It'll be helpful for avoiding the
double-free of the jack instance.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--include/sound/jack.h2
-rw-r--r--sound/core/jack.c3
2 files changed, 5 insertions, 0 deletions
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 6b013c6f6a04..f236e426a706 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -50,6 +50,8 @@ struct snd_jack {
 	int type;
 	const char *id;
 	char name[100];
+	void *private_data;
+	void (*private_free)(struct snd_jack *);
 };
 
 #ifdef CONFIG_SND_JACK
diff --git a/sound/core/jack.c b/sound/core/jack.c
index c8254c667c62..d54d1a05fe65 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -35,6 +35,9 @@ static int snd_jack_dev_free(struct snd_device *device)
 {
 	struct snd_jack *jack = device->device_data;
 
+	if (jack->private_free)
+		jack->private_free(jack);
+
 	/* If the input device is registered with the input subsystem
 	 * then we need to use a different deallocator. */
 	if (jack->registered)