From 159d4e82db0367fc138f2427503dfc8ba62dde22 Mon Sep 17 00:00:00 2001 From: pajama-coder Date: Sun, 16 Jun 2024 11:12:56 +0800 Subject: [PATCH] [core] Check pipeline template integrity after the construction function returns --- src/api/pipeline-api.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/api/pipeline-api.cpp b/src/api/pipeline-api.cpp index d90cff1c..1f840f0f 100644 --- a/src/api/pipeline-api.cpp +++ b/src/api/pipeline-api.cpp @@ -82,9 +82,13 @@ auto PipelineDesigner::make_pipeline_layout(pjs::Context &ctx, pjs::Function *bu auto worker = static_cast(ctx.instance()); auto pl = PipelineLayout::make(worker); auto pd = PipelineDesigner::make(pl); - pjs::Value arg(pd), ret; - (*builder)(ctx, 1, &arg, ret); - pd->close(); + try { + pjs::Value arg(pd), ret; + (*builder)(ctx, 1, &arg, ret); + pd->close(); + } catch (std::runtime_error &err) { + ctx.error(err); + } if (ctx.ok()) return pl; pl->retain(); pl->release(); @@ -131,6 +135,7 @@ void PipelineDesigner::to(PipelineLayout *layout) { } void PipelineDesigner::close() { + check_integrity(); m_current_filter = nullptr; m_current_joint_filter = nullptr; m_layout = nullptr;