]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fix missing snd_dlclose() in sequencer
authorTakashi Iwai <tiwai@suse.de>
Tue, 25 Apr 2006 15:27:26 +0000 (17:27 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 25 Apr 2006 15:27:26 +0000 (17:27 +0200)
Call snd_dlclose() with the dlopen handle in snd_seq_close().

src/seq/seq.c
src/seq/seq_local.h

index a2424c9a32ebef7fcf62e367b218bb61f7d7da29..751f7fd7ed68a6bcccf8866af1797bc918c6a146 100644 (file)
@@ -915,7 +915,14 @@ static int snd_seq_open_conf(snd_seq_t **seqp, const char *name,
        _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,
@@ -1029,6 +1036,8 @@ int snd_seq_close(snd_seq_t *seq)
        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);
index 29f9028b93ae17d1c3cf681a3be245b2cdceb464..3dfb2567b3c1badd994d7e0df8aaa4bc758e127d 100644 (file)
@@ -76,6 +76,7 @@ struct _snd_seq {
        int streams;
        int mode;
        int poll_fd;
+       void *dl_handle;
        snd_seq_ops_t *ops;
        void *private_data;
        int client;             /* client number */