Fix missing snd_dlclose() in timer handlers

Call snd_dlclose() properly for the dlopened handlers in timer
and timer_query closing functions.
This commit is contained in:
Takashi Iwai 2006-04-25 17:26:16 +02:00
parent 34e99ad251
commit b9c53dd962
3 changed files with 22 additions and 2 deletions

View file

@ -129,7 +129,14 @@ static int snd_timer_query_open_conf(snd_timer_query_t **timer,
_err:
if (type_conf)
snd_config_delete(type_conf);
return err >= 0 ? open_func(timer, name, timer_root, timer_conf, mode) : err;
if (! err) {
err = open_func(timer, name, timer_root, timer_conf, mode);
if (err < 0)
snd_dlclose(h);
else
(*timer)->dl_handle = h;
}
return err;
}
static int snd_timer_query_open_noupdate(snd_timer_query_t **timer, snd_config_t *root, const char *name, int mode)
@ -197,6 +204,8 @@ int snd_timer_query_close(snd_timer_query_t *timer)
int err;
assert(timer);
err = timer->ops->close(timer);
if (timer->dl_handle)
snd_dlclose(timer->dl_handle);
free(timer->name);
free(timer);
return err;