loader: code refactoring

Ensure scene data is freed when it's dangled in the loader.
This commit is contained in:
Hermet Park 2024-01-10 11:54:32 +09:00 committed by Hermet Park
parent 9958d346cf
commit 0eafcfd1b0
4 changed files with 13 additions and 12 deletions

View file

@ -284,10 +284,8 @@ bool LottieLoader::read()
{ {
if (!content || size == 0) return false; if (!content || size == 0) return false;
if (!LoadModule::read()) return true; //the loading has been already completed
if (comp || !LoadModule::read()) return true;
//the loading has been already completed in header()
if (comp) return true;
TaskScheduler::request(this); TaskScheduler::request(this);

View file

@ -3732,10 +3732,8 @@ bool SvgLoader::read()
{ {
if (!content || size == 0) return false; if (!content || size == 0) return false;
if (!LoadModule::read()) return true;
//the loading has been already completed in header() //the loading has been already completed in header()
if (root) return true; if (root || !LoadModule::read()) return true;
TaskScheduler::request(this); TaskScheduler::request(this);

View file

@ -32,7 +32,7 @@
/************************************************************************/ /************************************************************************/
void TvgLoader::clear() void TvgLoader::clear(bool all)
{ {
if (copy) free((char*)data); if (copy) free((char*)data);
ptr = data = nullptr; ptr = data = nullptr;
@ -41,6 +41,8 @@ void TvgLoader::clear()
delete(interpreter); delete(interpreter);
interpreter = nullptr; interpreter = nullptr;
if (all) delete(root);
} }
@ -113,7 +115,7 @@ void TvgLoader::run(unsigned tid)
root = interpreter->run(data, this->data + size); root = interpreter->run(data, this->data + size);
} }
clear(); clear(false);
} }
@ -213,7 +215,8 @@ bool TvgLoader::read()
{ {
if (!ptr || size == 0) return false; if (!ptr || size == 0) return false;
if (!LoadModule::read()) return true; //the loading has been already completed
if (root || !LoadModule::read()) return true;
TaskScheduler::request(this); TaskScheduler::request(this);
@ -224,5 +227,7 @@ bool TvgLoader::read()
Paint* TvgLoader::paint() Paint* TvgLoader::paint()
{ {
this->done(); this->done();
return root; auto ret = root;
root = nullptr;
return ret;
} }

View file

@ -55,7 +55,7 @@ public:
private: private:
bool readHeader(); bool readHeader();
void run(unsigned tid) override; void run(unsigned tid) override;
void clear(); void clear(bool all = true);
}; };
#endif //_TVG_TVG_LOADER_H_ #endif //_TVG_TVG_LOADER_H_