|
@@ -123,6 +123,7 @@ int __init snd_seq_system_client_init(void)
|
|
|
{
|
|
|
struct snd_seq_port_callback pcallbacks;
|
|
|
struct snd_seq_port_info *port;
|
|
|
+ int err;
|
|
|
|
|
|
port = kzalloc(sizeof(*port), GFP_KERNEL);
|
|
|
if (!port)
|
|
@@ -148,7 +149,10 @@ int __init snd_seq_system_client_init(void)
|
|
|
port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
|
|
|
port->addr.client = sysclient;
|
|
|
port->addr.port = SNDRV_SEQ_PORT_SYSTEM_TIMER;
|
|
|
- snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port);
|
|
|
+ err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT,
|
|
|
+ port);
|
|
|
+ if (err < 0)
|
|
|
+ goto error_port;
|
|
|
|
|
|
/* register announcement port */
|
|
|
strcpy(port->name, "Announce");
|
|
@@ -158,16 +162,24 @@ int __init snd_seq_system_client_init(void)
|
|
|
port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
|
|
|
port->addr.client = sysclient;
|
|
|
port->addr.port = SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE;
|
|
|
- snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port);
|
|
|
+ err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT,
|
|
|
+ port);
|
|
|
+ if (err < 0)
|
|
|
+ goto error_port;
|
|
|
announce_port = port->addr.port;
|
|
|
|
|
|
kfree(port);
|
|
|
return 0;
|
|
|
+
|
|
|
+ error_port:
|
|
|
+ snd_seq_system_client_done();
|
|
|
+ kfree(port);
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* unregister our internal client */
|
|
|
-void __exit snd_seq_system_client_done(void)
|
|
|
+void snd_seq_system_client_done(void)
|
|
|
{
|
|
|
int oldsysclient = sysclient;
|
|
|
|