вт, 24 янв. 2023 г., 02:44 Stefan de Konink <[email protected]>:
Hi Andrew,
When changing this, to be more in line with the "HV" code...
diff --git a/cinelerra-5.1/cinelerra/playbackengine.C b/cinelerra-5.1/cinelerra/playbackengine.C index 815e506f..3c2a9368 100644 --- a/cinelerra-5.1/cinelerra/playbackengine.C +++ b/cinelerra-5.1/cinelerra/playbackengine.C @@ -172,9 +172,9 @@ void PlaybackEngine::create_cache() { cache_lock->lock("PlaybackEngine::create_cache"); if( audio_cache ) - audio_cache->remove_user(); + delete audio_cache; if( video_cache ) - video_cache->remove_user(); + delete video_cache; audio_cache = new CICache(preferences); video_cache = new CICache(preferences); cache_lock->unlock();
...will result in a fix for the memory leak, but does cause a warning message.
Garbage::~Garbage: title=CICache users=1 was not deleted by Garbage::remove_user
This was changed with f5725c7e (7/4/20).
https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blobdiff;f=cinel... hm .... may be you also can try to restore this idea about calling new only if cache does not exist ... @@ -162,10 +164,12 @@ void PlaybackEngine::wait_render_engine() void PlaybackEngine::create_cache() { - if(audio_cache) { delete audio_cache; audio_cache = 0; } - if(video_cache) { delete video_cache; video_cache = 0; } - if(!audio_cache) audio_cache = new CICache(preferences); - if(!video_cache) video_cache = new CICache(preferences); + if( audio_cache ) + audio_cache->remove_user(); + if( video_cache ) + video_cache->remove_user(); + audio_cache = new CICache(preferences); + video_cache = new CICache(preferences); } But also shows that many unrelated
changes cause real issues to hide. I found this by hand, not even using git bisect. I understand the urge for the garbage collector, but for some reason not behaving. What I notice is that the 'last' object is empty when it is actually destroyed by the garbage collector (~CICache). What is the best way going forward?
-- Stefan