ffmediaelement icon indicating copy to clipboard operation
ffmediaelement copied to clipboard

Deadlock on Dispose

Open igvk opened this issue 3 years ago • 4 comments

Issue Title

Deadlock condition when Disposing CommandManager

Issue Categories

  • [x] Bug

Version Information

  • [x] Build From Master branch, Commit bae88aa

Steps to Reproduce

Open media file, then close the player

Code

There exists deadlock condition in CommandManager.OnDisposing and ExecuteDirectCommand when there IsDirectCommandPending. PauseAsync eternally waits for the lock that is held by Dispose in the main thread.

WorkerBase.cs:

        protected virtual void Dispose(bool alsoManaged)
        {
            StopAsync().Wait();

            lock (SyncLock)
            {
            ...
                try { OnDisposing(); } catch { /* Ignore */ }
            ...
        }

        public Task<WorkerState> PauseAsync()
        {
            lock (SyncLock)
            {
            ...
        }


CommandManager.cs:

        protected override void OnDisposing()
        {
            ...
            // wait for any pending direct commands (unlikely)
            this.LogDebug(Aspects.EngineCommand, "Dispose is waiting for pending direct commands.");
            while (IsDirectCommandPending)
                Task.Delay(Constants.DefaultTimingPeriod).Wait();
            ...
        }


CommandManager.Direct.cs:

        private Task<bool> ExecuteDirectCommand(DirectCommandType command, Func<bool> commandDeleagte)
        {
            ...
                    PauseAsync().Wait();
            ...
        }

igvk avatar Oct 21 '21 06:10 igvk

I've seen this in a couple of dump files from my customer. Mario, do you have any intention to do a bugfix pass on this library? I would be happy to pay towards your time!

dbruning avatar Dec 10 '21 21:12 dbruning

Just encountered the same issue. Any hope to get the fix?

arq606 avatar Feb 16 '22 14:02 arq606

I created a PR. If you can't wait for it to be included the main repo, and you want to build it yourself, my fork velogic/ffmediaelement has a couple of additional changes I had to make to build the dll on my machine.

dbruning avatar Feb 16 '22 18:02 dbruning

This issue has been automatically marked as stale because it has not had recent activity. Thank you for your contributions.

stale[bot] avatar Apr 18 '22 07:04 stale[bot]