diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index e2f272e6..b2ebfea0 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -132,11 +132,17 @@ void Connection::SetErrorHandler(ErrorHandler handler, void *data) void Connection::UpdateStatus() { + if (!itsConnection) + return; + CheckForErrors(); if (itsOldStatus) mpd_freeStatus(itsOldStatus); + itsOldStatus = itsCurrentStatus; + itsCurrentStatus = 0; + mpd_sendStatusCommand(itsConnection); itsCurrentStatus = mpd_getStatus(itsConnection); @@ -849,6 +855,7 @@ int Connection::CheckForErrors() itsErrorCode = 0; if (itsConnection->error) { + itsErrorMessage = itsConnection->errorStr; if (itsConnection->error == MPD_ERROR_ACK) { // this is to avoid setting too small max size as we check it before fetching current status @@ -862,13 +869,13 @@ int Connection::CheckForErrors() } else { - isConnected = 0; // the rest of errors are fatal to connection if (itsErrorHandler) itsErrorHandler(this, itsConnection->error, itsConnection->errorStr, itsErrorHandlerUserdata); itsErrorCode = itsConnection->error; + Disconnect(); // the rest of errors are fatal to connection } - itsErrorMessage = itsConnection->errorStr; - mpd_clearError(itsConnection); + if (itsConnection) + mpd_clearError(itsConnection); } return itsErrorCode; } diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 4fca9a81..f3cff18c 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -363,7 +363,6 @@ int main(int argc, char *argv[]) if (!Mpd->Connected()) { ShowMessage("Attempting to reconnect..."); - Mpd->Disconnect(); if (Mpd->Connect()) ShowMessage("Connected!"); messages_allowed = 0;