diff --git a/sunshine/video.cpp b/sunshine/video.cpp index f435d507..0f7eff35 100644 --- a/sunshine/video.cpp +++ b/sunshine/video.cpp @@ -324,9 +324,14 @@ struct encoder_t { class session_t { public: session_t() = default; - session_t(ctx_t &&ctx, std::shared_ptr &&device, int inject) : device { std::move(device) }, ctx { std::move(ctx) }, inject { inject } {} + session_t(ctx_t &&ctx, std::shared_ptr &&device, int inject) : ctx { std::move(ctx) }, device { std::move(device) }, inject { inject } {} session_t(session_t &&other) noexcept = default; + ~session_t() { + // Order matters here because the context relies on the hwdevice still being valid + ctx.reset(); + device.reset(); + } // Ensure objects are destroyed in the correct order session_t &operator=(session_t &&other) { @@ -341,8 +346,8 @@ public: return *this; } - std::shared_ptr device; ctx_t ctx; + std::shared_ptr device; std::vector replacements;