diff options
author | Max Kellermann <max@duempel.org> | 2009-02-02 18:19:11 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-02-02 18:22:56 +0100 |
commit | 3b0a78fe0dc9f4110692975f54cd1e585d2c6e27 (patch) | |
tree | 4d367a275c4df971892cdec0b0b5379552931d19 | |
parent | 1fdf25214f1c4c6d2df1a6386d4091ec07c94ef9 (diff) |
shout_mp3: call lame_close() in clear_encoder() method
The shout_mp3 encoder had two bugs: when no song was ever played, MPD
segfaulted during cleanup. Second bug: memory leak, each time the
shout device was opened, lame_init() was called again, and
lame_close() is only called once during shutdown.
Fix this by shutting down LAME each time the clear_encoder() method is
called.
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/output/shout_mp3.c | 8 |
2 files changed, 7 insertions, 2 deletions
@@ -43,6 +43,7 @@ ver 0.14.2 (2009/??/??) - jack: allocate ring buffers before connecting - jack: clear "shutdown" flag on reconnect - jack: reduced sleep time to 1ms + - shout: fixed memory leak in the mp3 encoder * mapper: remove trailing slashes from music_directory * player: set player error when output device fails diff --git a/src/output/shout_mp3.c b/src/output/shout_mp3.c index eb95c8b3e..1369f6c80 100644 --- a/src/output/shout_mp3.c +++ b/src/output/shout_mp3.c @@ -19,6 +19,8 @@ #include "shout_plugin.h" #include <lame/lame.h> + +#include <assert.h> #include <stdlib.h> struct lame_data { @@ -45,6 +47,9 @@ static int shout_mp3_encoder_clear_encoder(struct shout_data *sd) buf->len)) < 0) g_warning("error flushing lame buffers\n"); + lame_close(ld->gfp); + ld->gfp = NULL; + return (ret > 0); } @@ -52,8 +57,7 @@ static void shout_mp3_encoder_finish(struct shout_data *sd) { struct lame_data *ld = (struct lame_data *)sd->encoder_data; - lame_close(ld->gfp); - ld->gfp = NULL; + assert(ld->gfp == NULL); g_free(ld); } |