Update of /cvsroot/alsa/alsa-kernel/core/seq/oss
In directory sc8-pr-cvs1:/tmp/cvs-serv24080/core/seq/oss
Modified Files:
seq_oss_init.c
Log Message:
fixed memory leaks at the error open path.
Index: seq_oss_init.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/seq/oss/seq_oss_init.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- seq_oss_init.c 19 Dec 2002 15:59:18 -0000 1.8
+++ seq_oss_init.c 5 Mar 2003 11:31:12 -0000 1.9
@@ -193,6 +193,7 @@
}
if (i >= SNDRV_SEQ_OSS_MAX_CLIENTS) {
snd_printk(KERN_ERR "too many applications\n");
+ kfree(dp);
return -ENOMEM;
}
@@ -209,22 +210,19 @@
if (dp->synth_opened == 0 && dp->max_mididev == 0) {
snd_printk(KERN_ERR "no device found\n");
- kfree(dp);
- return -ENODEV;
+ rc = -ENODEV;
+ goto _error;
}
/* create port */
if ((rc = create_port(dp)) < 0) {
snd_printk(KERN_ERR "can't create port\n");
- free_devinfo(dp);
- return rc;
+ goto _error;
}
/* allocate queue */
- if ((rc = alloc_seq_queue(dp)) < 0) {
- delete_port(dp);
- return rc;
- }
+ if ((rc = alloc_seq_queue(dp)) < 0)
+ goto _error;
/* set address */
dp->addr.client = dp->cseq;
@@ -240,9 +238,8 @@
/* initialize read queue */
if (is_read_mode(dp->file_mode)) {
if ((dp->readq = snd_seq_oss_readq_new(dp, maxqlen)) == NULL) {
- delete_seq_queue(dp);
- delete_port(dp);
- return -ENOMEM;
+ rc = -ENOMEM;
+ goto _error;
}
}
@@ -250,18 +247,16 @@
if (is_write_mode(dp->file_mode)) {
dp->writeq = snd_seq_oss_writeq_new(dp, maxqlen);
if (dp->writeq == NULL) {
- delete_seq_queue(dp);
- delete_port(dp);
- return -ENOMEM;
+ rc = -ENOMEM;
+ goto _error;
}
}
/* initialize timer */
if ((dp->timer = snd_seq_oss_timer_new(dp)) == NULL) {
snd_printk(KERN_ERR "can't alloc timer\n");
- delete_seq_queue(dp);
- delete_port(dp);
- return -ENOMEM;
+ rc = -ENOMEM;
+ goto _error;
}
/* set private data pointer */
@@ -277,8 +272,15 @@
num_clients++;
debug_printk(("open done\n"));
-
return 0;
+
+ _error:
+ delete_seq_queue(dp);
+ delete_port(dp);
+ snd_seq_oss_synth_cleanup(dp);
+ snd_seq_oss_midi_cleanup(dp);
+
+ return rc;
}
/*
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog