_err:
if (type_conf)
snd_config_delete(type_conf);
- return err >= 0 ? open_func(seqp, name, seq_root, seq_conf, streams, mode) : err;
+ if (! err) {
+ err = open_func(seqp, name, seq_root, seq_conf, streams, mode);
+ if (err < 0)
+ snd_dlclose(h);
+ else
+ (*seqp)->dl_handle = h;
+ }
+ return err;
}
static int snd_seq_open_noupdate(snd_seq_t **seqp, snd_config_t *root,
int err;
assert(seq);
err = seq->ops->close(seq);
+ if (seq->dl_handle)
+ snd_dlclose(seq->dl_handle);
free(seq->obuf);
free(seq->ibuf);
free(seq->tmpbuf);