mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-03 09:01:52 -05:00
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:
parent
34e99ad251
commit
b9c53dd962
3 changed files with 22 additions and 2 deletions
|
|
@ -171,7 +171,14 @@ static int snd_timer_open_conf(snd_timer_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_open_noupdate(snd_timer_t **timer, snd_config_t *root, const char *name, int mode)
|
||||
|
|
@ -243,6 +250,8 @@ int snd_timer_close(snd_timer_t *timer)
|
|||
snd_async_del_handler(h);
|
||||
}
|
||||
err = timer->ops->close(timer);
|
||||
if (timer->dl_handle)
|
||||
snd_dlclose(timer->dl_handle);
|
||||
free(timer->name);
|
||||
free(timer);
|
||||
return err;
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ typedef struct {
|
|||
|
||||
struct _snd_timer {
|
||||
unsigned int version;
|
||||
void *dl_handle;
|
||||
char *name;
|
||||
snd_timer_type_t type;
|
||||
int mode;
|
||||
|
|
@ -58,6 +59,7 @@ typedef struct {
|
|||
} snd_timer_query_ops_t;
|
||||
|
||||
struct _snd_timer_query {
|
||||
void *dl_handle;
|
||||
char *name;
|
||||
snd_timer_type_t type;
|
||||
int mode;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue