diff --git a/src/common/tvgLock.h b/src/common/tvgLock.h index d8bf7269..59f68d0d 100644 --- a/src/common/tvgLock.h +++ b/src/common/tvgLock.h @@ -28,6 +28,7 @@ #define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR #include +#include "tvgTaskScheduler.h" namespace tvg { @@ -42,13 +43,17 @@ namespace tvg { ScopedLock(Key& k) { - k.mtx.lock(); - key = &k; + if (TaskScheduler::threads() > 0) { + k.mtx.lock(); + key = &k; + } } ~ScopedLock() { - key->mtx.unlock(); + if (TaskScheduler::threads() > 0) { + key->mtx.unlock(); + } } }; diff --git a/src/renderer/tvgRender.cpp b/src/renderer/tvgRender.cpp index 90432d65..6ecaf77b 100644 --- a/src/renderer/tvgRender.cpp +++ b/src/renderer/tvgRender.cpp @@ -32,6 +32,20 @@ /* External Class Implementation */ /************************************************************************/ +uint32_t RenderMethod::ref() +{ + ScopedLock lock(key); + return (++refCnt); +} + + +uint32_t RenderMethod::unref() +{ + ScopedLock lock(key); + return (--refCnt); +} + + void RenderTransform::override(const Matrix& m) { this->m = m; diff --git a/src/renderer/tvgRender.h b/src/renderer/tvgRender.h index 670338dc..8d52df71 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -246,17 +246,8 @@ private: Key key; public: - uint32_t ref() - { - ScopedLock lock(key); - return (++refCnt); - } - - uint32_t unref() - { - ScopedLock lock(key); - return (--refCnt); - } + uint32_t ref(); + uint32_t unref(); virtual ~RenderMethod() {} virtual RenderData prepare(const RenderShape& rshape, RenderData data, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) = 0;