|
@@ -207,8 +207,10 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
|
|
16, voices,
|
|
16, voices,
|
|
name);
|
|
name);
|
|
if (opl3->chset->port < 0) {
|
|
if (opl3->chset->port < 0) {
|
|
|
|
+ int port;
|
|
|
|
+ port = opl3->chset->port;
|
|
snd_midi_channel_free_set(opl3->chset);
|
|
snd_midi_channel_free_set(opl3->chset);
|
|
- return opl3->chset->port;
|
|
|
|
|
|
+ return port;
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -218,7 +220,7 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
|
|
static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
|
|
static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
|
|
{
|
|
{
|
|
struct snd_opl3 *opl3;
|
|
struct snd_opl3 *opl3;
|
|
- int client;
|
|
|
|
|
|
+ int client, err;
|
|
char name[32];
|
|
char name[32];
|
|
int opl_ver;
|
|
int opl_ver;
|
|
|
|
|
|
@@ -239,7 +241,11 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
|
|
if (client < 0)
|
|
if (client < 0)
|
|
return client;
|
|
return client;
|
|
|
|
|
|
- snd_opl3_synth_create_port(opl3);
|
|
|
|
|
|
+ if ((err = snd_opl3_synth_create_port(opl3)) < 0) {
|
|
|
|
+ snd_seq_delete_kernel_client(client);
|
|
|
|
+ opl3->seq_client = -1;
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
|
|
|
|
/* initialize instrument list */
|
|
/* initialize instrument list */
|
|
opl3->ilist = snd_seq_instr_list_new();
|
|
opl3->ilist = snd_seq_instr_list_new();
|