command/Error: pass std::exception_ptr to PrintError()
Necessary to preserve type information. The try/catch sequence didn't work previously.
This commit is contained in:
parent
672e18cac9
commit
1c90400081
@ -418,6 +418,6 @@ try {
|
|||||||
return ret;
|
return ret;
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
Response r(client, num);
|
Response r(client, num);
|
||||||
PrintError(r, e);
|
PrintError(r, std::current_exception());
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
@ -159,19 +159,26 @@ print_error(Response &r, const Error &error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
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 {
|
try {
|
||||||
throw e;
|
std::rethrow_exception(ep);
|
||||||
} catch (const ProtocolError &pe) {
|
} catch (const ProtocolError &pe) {
|
||||||
r.Error(pe.GetCode(), pe.what());
|
r.Error(pe.GetCode(), pe.what());
|
||||||
} catch (const PlaylistError &pe) {
|
} catch (const PlaylistError &pe) {
|
||||||
r.Error(ToAck(pe.GetCode()), pe.what());
|
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());
|
r.Error(ACK_ERROR_SYSTEM, e.what());
|
||||||
} catch (...) {
|
} catch (const std::exception &e) {
|
||||||
r.Error(ACK_ERROR_UNKNOWN, e.what());
|
r.Error(ACK_ERROR_UNKNOWN, e.what());
|
||||||
|
} catch (...) {
|
||||||
|
r.Error(ACK_ERROR_UNKNOWN, "Unknown error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "PlaylistError.hxx"
|
#include "PlaylistError.hxx"
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
class exception;
|
class exception_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Response;
|
class Response;
|
||||||
@ -40,6 +40,6 @@ CommandResult
|
|||||||
print_error(Response &r, const Error &error);
|
print_error(Response &r, const Error &error);
|
||||||
|
|
||||||
void
|
void
|
||||||
PrintError(Response &r, const std::exception &e);
|
PrintError(Response &r, std::exception_ptr ep);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user