[Cin] Complete system hangs (likely out of memory)

Andrew Randrianasulu randrianasulu at gmail.com
Tue Jan 24 03:51:40 CET 2023


вт, 24 янв. 2023 г., 02:44 Stefan de Konink <stefan at konink.de>:

> 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=cinelerra-5.1/cinelerra/playbackengine.C;h=82bd7bb6587b930b77caa7f4da7673255539b3a3;hp=8ce98234c3ffc7ed2b0ed6e4c00b4f6e3fa749ee;hb=f5725c7e12def18fec49a295dad688652edaa4b3;hpb=c387b8938dc838e5b92d1cd735975d0928ecf61a


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20230124/914ac885/attachment.htm>


More information about the Cin mailing list