Commit 1c904000 authored by Max Kellermann's avatar Max Kellermann

command/Error: pass std::exception_ptr to PrintError()

Necessary to preserve type information. The try/catch sequence didn't work previously.
parent 672e18ca
......@@ -418,6 +418,6 @@ try {
return ret;
} catch (const std::exception &e) {
Response r(client, num);
PrintError(r, e);
PrintError(r, std::current_exception());
return CommandResult::ERROR;
}
......@@ -159,19 +159,26 @@ print_error(Response &r, const Error &error)
}
void
PrintError(Response &r, const std::exception &e)
PrintError(Response &r, std::exception_ptr ep)
{
LogError(e);
try {
std::rethrow_exception(ep);
} catch (const std::exception &e) {
LogError(e);
} catch (...) {
}
try {
throw e;
std::rethrow_exception(ep);
} catch (const ProtocolError &pe) {
r.Error(pe.GetCode(), pe.what());
} catch (const PlaylistError &pe) {
r.Error(ToAck(pe.GetCode()), pe.what());
} catch (const std::system_error &) {
} catch (const std::system_error &e) {
r.Error(ACK_ERROR_SYSTEM, e.what());
} catch (...) {
} catch (const std::exception &e) {
r.Error(ACK_ERROR_UNKNOWN, e.what());
} catch (...) {
r.Error(ACK_ERROR_UNKNOWN, "Unknown error");
}
}
......@@ -24,7 +24,7 @@
#include "PlaylistError.hxx"
namespace std {
class exception;
class exception_ptr;
}
class Response;
......@@ -40,6 +40,6 @@ CommandResult
print_error(Response &r, const Error &error);
void
PrintError(Response &r, const std::exception &e);
PrintError(Response &r, std::exception_ptr ep);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment