Added custom allocator for subsonic responses

This commit is contained in:
emeric
2024-03-19 09:08:43 +01:00
parent 5bfd31ff8a
commit 78384d5d3f
8 changed files with 324 additions and 26 deletions
+17 -3
View File
@@ -159,7 +159,7 @@ namespace lms::api::subsonic
CheckImplementedFunc checkFunc{};
};
static const std::unordered_map<core::LiteralString, RequestEntryPointInfo, core::LiteralStringHash, core::LiteralStringEqual> requestEntryPoints
const std::unordered_map<core::LiteralString, RequestEntryPointInfo, core::LiteralStringHash, core::LiteralStringEqual> requestEntryPoints
{
// System
{"/ping", {handlePingRequest}},
@@ -266,13 +266,26 @@ namespace lms::api::subsonic
};
using MediaRetrievalHandlerFunc = std::function<void(RequestContext&, const Wt::Http::Request&, Wt::Http::Response&)>;
static std::unordered_map<core::LiteralString, MediaRetrievalHandlerFunc, core::LiteralStringHash, core::LiteralStringEqual> mediaRetrievalHandlers
const std::unordered_map<core::LiteralString, MediaRetrievalHandlerFunc, core::LiteralStringHash, core::LiteralStringEqual> mediaRetrievalHandlers
{
// Media retrieval
{"/download", handleDownload},
{"/stream", handleStream},
{"/getCoverArt", handleGetCoverArt},
};
struct TLSMonotonicMemoryResourceCleaner
{
TLSMonotonicMemoryResourceCleaner() = default;
~TLSMonotonicMemoryResourceCleaner()
{
TLSMonotonicMemoryResource::getInstance().reset();
}
private:
TLSMonotonicMemoryResourceCleaner(const TLSMonotonicMemoryResourceCleaner&) = delete;
TLSMonotonicMemoryResourceCleaner& operator=(const TLSMonotonicMemoryResourceCleaner&) = delete;
};
}
SubsonicResource::SubsonicResource(db::Db& db)
@@ -287,7 +300,8 @@ namespace lms::api::subsonic
{
static std::atomic<std::size_t> curRequestId{};
const std::size_t requestId{ curRequestId++ };
const std::size_t requestId{ curRequestId++ };
TLSMonotonicMemoryResourceCleaner memoryResourceCleaner;
LMS_LOG(API_SUBSONIC, DEBUG, "Handling request " << requestId << " '" << request.pathInfo() << "', continuation = " << (request.continuation() ? "true" : "false") << ", params = " << parameterMapToDebugString(request.getParameterMap()));