From 93c97972b9cb41284f8af8b653e056484bbf4717 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 26 Oct 2015 16:32:39 +0100
Subject: decoder/gme: call decoder_seek_error() on seek error

---
 src/decoder/plugins/GmeDecoderPlugin.cxx | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/decoder/plugins/GmeDecoderPlugin.cxx')

diff --git a/src/decoder/plugins/GmeDecoderPlugin.cxx b/src/decoder/plugins/GmeDecoderPlugin.cxx
index cc6ce5e5d..eab655c91 100644
--- a/src/decoder/plugins/GmeDecoderPlugin.cxx
+++ b/src/decoder/plugins/GmeDecoderPlugin.cxx
@@ -196,9 +196,11 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 		if (cmd == DecoderCommand::SEEK) {
 			unsigned where = decoder_seek_time(decoder).ToMS();
 			gme_err = gme_seek(emu, where);
-			if (gme_err != nullptr)
+			if (gme_err != nullptr) {
 				LogWarning(gme_domain, gme_err);
-			decoder_command_finished(decoder);
+				decoder_seek_error(decoder);
+			} else
+				decoder_command_finished(decoder);
 		}
 
 		if (gme_track_ended(emu))
-- 
cgit v1.2.3


From a84fbbe32716ecee9c8a02b50251097fc35709ec Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 26 Oct 2015 17:15:24 +0100
Subject: decoder/gme: free the gme_info_t as early as possible

---
 src/decoder/plugins/GmeDecoderPlugin.cxx | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

(limited to 'src/decoder/plugins/GmeDecoderPlugin.cxx')

diff --git a/src/decoder/plugins/GmeDecoderPlugin.cxx b/src/decoder/plugins/GmeDecoderPlugin.cxx
index eab655c91..bbe2596c9 100644
--- a/src/decoder/plugins/GmeDecoderPlugin.cxx
+++ b/src/decoder/plugins/GmeDecoderPlugin.cxx
@@ -156,8 +156,11 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 		return;
 	}
 
-	const SignedSongTime song_len = ti->length > 0
-		? SignedSongTime::FromMS(ti->length)
+	const int length = ti->length;
+	gme_free_info(ti);
+
+	const SignedSongTime song_len = length > 0
+		? SignedSongTime::FromMS(length)
 		: SignedSongTime::Negative();
 
 	/* initialize the MPD decoder */
@@ -168,7 +171,6 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 				       SampleFormat::S16, GME_CHANNELS,
 				       error)) {
 		LogError(error);
-		gme_free_info(ti);
 		gme_delete(emu);
 		return;
 	}
@@ -179,8 +181,8 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 	if (gme_err != nullptr)
 		LogWarning(gme_domain, gme_err);
 
-	if (ti->length > 0)
-		gme_set_fade(emu, ti->length);
+	if (length > 0)
+		gme_set_fade(emu, length);
 
 	/* play */
 	DecoderCommand cmd;
@@ -207,7 +209,6 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 			break;
 	} while (cmd != DecoderCommand::STOP);
 
-	gme_free_info(ti);
 	gme_delete(emu);
 }
 
-- 
cgit v1.2.3


From 5719207dfa14cfed63e0446f7f7a8343575a465f Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 26 Oct 2015 17:16:20 +0100
Subject: gme: don't loop forever, fall back to GME's default play length

Fixes http://bugs.musicpd.org/view.php?id=4432
---
 src/decoder/plugins/GmeDecoderPlugin.cxx | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'src/decoder/plugins/GmeDecoderPlugin.cxx')

diff --git a/src/decoder/plugins/GmeDecoderPlugin.cxx b/src/decoder/plugins/GmeDecoderPlugin.cxx
index bbe2596c9..b47e9ea66 100644
--- a/src/decoder/plugins/GmeDecoderPlugin.cxx
+++ b/src/decoder/plugins/GmeDecoderPlugin.cxx
@@ -156,7 +156,7 @@ gme_file_decode(Decoder &decoder, Path path_fs)
 		return;
 	}
 
-	const int length = ti->length;
+	const int length = ti->play_length;
 	gme_free_info(ti);
 
 	const SignedSongTime song_len = length > 0
@@ -239,9 +239,9 @@ gme_scan_file(Path path_fs,
 
 	assert(ti != nullptr);
 
-	if (ti->length > 0)
+	if (ti->play_length > 0)
 		tag_handler_invoke_duration(handler, handler_ctx,
-					    SongTime::FromMS(ti->length));
+					    SongTime::FromMS(ti->play_length));
 
 	if (ti->song != nullptr) {
 		if (gme_track_count(emu) > 1) {
-- 
cgit v1.2.3