From e6389ff5a169a9653f3a2dfa6d0f789f21a4a453 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Thu, 7 Jul 2016 13:52:33 +0200
Subject: [PATCH] client/ClientRead: call Break() before Close()

Referencing the attribute "partition" is illegal after Close(),
because Close() deletes "this".
---
 NEWS                      | 2 +-
 src/client/ClientRead.cxx | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 58edf3f64..bd547f42f 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,7 @@ ver 0.19.17 (not yet released)
 * fix spurious seek error "Failed to allocate silence buffer"
 * replay gain: fix "replay_gain_handler mixer" setting
 * DSD: use 0x69 as silence pattern
-* fix use-after-free bug on "close"
+* fix use-after-free bug on "close" and "kill"
 
 ver 0.19.16 (2016/06/13)
 * faster seeking
diff --git a/src/client/ClientRead.cxx b/src/client/ClientRead.cxx
index 9cfb1271f..232da8d62 100644
--- a/src/client/ClientRead.cxx
+++ b/src/client/ClientRead.cxx
@@ -52,8 +52,8 @@ Client::OnSocketInput(void *data, size_t length)
 		break;
 
 	case CommandResult::KILL:
-		Close();
 		partition.instance.event_loop->Break();
+		Close();
 		return InputResult::CLOSED;
 
 	case CommandResult::FINISH: