[no Bug] Incorrect disposal of SlimDX resources? (1 Viewer)

morpheus_xx

Retired Team Member
  • Team MediaPortal
  • March 24, 2007
    12,070
    7,459
    Home Country
    Germany Germany
    While I was tracing some texture disposal issues I enabled the SlimDX.Configuration.DetectDoubleDispose feature (SlimDX Sept. 2011 runtime, newer than master!)

    After doing this, I got exceptions in log from different sources. All of them where dealing with the usual combination of:
    • Texture t;
    • Surface s=t.GetSurfaceLevel(0);
    When t is Disposed, you get the exception when s should be disposed as well. This means to me, that the indirect reference of SurfaceLevel0 must not be disposed explicitly.
    Code:
    System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    Objektname: "SlimDX.Direct3D9.Surface".
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.Surface.Dispose(Boolean )
       bei SlimDX.ComObject.Dispose()
       bei SlimDX.ObjectTable.Remove(ComObject comObject)
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.BaseTexture.Dispose(Boolean )
       bei SlimDX.Direct3D9.Texture.Dispose(Boolean )
       bei SlimDX.ComObject.Dispose()
       bei MediaPortal.UI.Players.Video.Tools.FilterGraphTools.TryDispose[TE](TE& objectToDispose)
       bei MediaPortal.UI.Players.Video.EVRCallback.FreeTexture()
       bei MediaPortal.UI.Players.Video.EVRCallback.Dispose()
       bei MediaPortal.UI.Players.Video.VideoPlayer.FreeEvrCallback()
       bei MediaPortal.UI.Players.Video.VideoPlayer.ReleaseGUIResources()
       bei MediaPortal.UI.SkinEngine.Players.PlayersHelper.ReleaseGUIResources(IPlayerSlotController psc)
    Code:
    [2011-10-31 12:36:42,018] [94178  ] [Main     ] [ERROR] - Error occured in FormClosing handler
    System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    Objektname: "SlimDX.Direct3D9.Surface".
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.Surface.Dispose(Boolean )
       bei SlimDX.ComObject.Dispose()
       bei SlimDX.ObjectTable.Remove(ComObject comObject)
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.BaseTexture.Dispose(Boolean )
       bei SlimDX.Direct3D9.Texture.Dispose(Boolean )
       bei SlimDX.ComObject.Dispose()
       bei MediaPortal.UI.SkinEngine.ContentManagement.AssetCore.RenderTextureAssetCore.Free()
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free(Dictionary`2 assets, Boolean checkIfCanBeDeleted, Int32 limit)
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free(Boolean checkIfCanBeDeleted)
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free()
       bei MediaPortal.UI.SkinEngine.GUI.MainForm.StopUI()
       bei MediaPortal.UI.SkinEngine.GUI.MainForm.MainForm_FormClosing(Object sender, FormClosingEventArgs e)
    Code:
    [2011-10-31 12:36:42,956] [95116  ] [Main     ] [FATAL] - Error executing application
    System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    Objektname: "SlimDX.Direct3D9.Surface".
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.Surface.Dispose(Boolean )
       bei SlimDX.ComObject.Dispose()
       bei MediaPortal.UI.SkinEngine.ContentManagement.AssetCore.RenderTextureAssetCore.Free()
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free(Dictionary`2 assets, Boolean checkIfCanBeDeleted, Int32 limit)
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free(Boolean checkIfCanBeDeleted)
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Free()
       bei MediaPortal.UI.SkinEngine.ContentManagement.ContentManager.Clear()
       bei MediaPortal.UI.SkinEngine.SkinEnginePlugin.MediaPortal.UI.Presentation.ISkinEngine.Shutdown()
       bei MediaPortal.Client.ApplicationLauncher.Main(String[] args) in D:\Coding\MP\MP2\MP2_git\MediaPortal-2\MediaPortal\Source\Main\MediaPortal.Client\ApplicationLauncher.cs:Zeile 182.

    Problem for me is the question: Bug or Feature of SlimDX ?
     

    morpheus_xx

    Retired Team Member
  • Team MediaPortal
  • March 24, 2007
    12,070
    7,459
    Home Country
    Germany Germany
    • Thread starter
    • Moderator
    • #3
    AW: Incorrect disposal of SlimDX resources?

    • Texture t;
    • Surface s=t.GetSurfaceLevel(0);

    Refer to the stacktrace and the internal disposal of surface "s" associated to the texture "t"
    Code:
    System.ObjectDisposedException: Auf das verworfene Objekt kann nicht zugegriffen werden.
    Objektname: "SlimDX.Direct3D9.Surface".
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
    [B]   bei SlimDX.Direct3D9.Surface.Dispose(Boolean )[/B] <-- "s", disposed manually before
       bei SlimDX.ComObject.Dispose()
       bei SlimDX.ObjectTable.Remove(ComObject comObject)
       bei SlimDX.ComObject.Destruct()
       bei SlimDX.ComObject.Dispose(Boolean )
       bei SlimDX.Direct3D9.BaseTexture.Dispose(Boolean )
    [B]   bei SlimDX.Direct3D9.Texture.Dispose(Boolean ) <-- "t"[/B]
    ...

    I'm not sure if we should care about this, as long as we don't leak resources. My only thought was, if the SlimDX takes care of Disposal for itself, we maybe should not Dispose Surface on our own.
     

    Albert

    MP2 Developer
  • Premium Supporter
  • February 18, 2008
    1,297
    1,130
    47
    Freiburg im Breisgau, Germany
    Home Country
    Germany Germany
    AW: Incorrect disposal of SlimDX resources?

    When t is Disposed, you get the exception when s should be disposed as well.

    What do you mean by that sentence?

    I only didn't understand your sentence. Did you want to say "that" instead of "when"?

    About the disposal issue; I don't remember exactly how it must be done in SlimDX, but SlimDX has a very good help which explicitly explains how resources should be disposed.
     

    Albert

    MP2 Developer
  • Premium Supporter
  • February 18, 2008
    1,297
    1,130
    47
    Freiburg im Breisgau, Germany
    Home Country
    Germany Germany
    AW: Incorrect disposal of SlimDX resources?

    Ah, after reading it again I understand what you said. You're referring to the disposal of s which is done automatically in the disposal code of t.
     

    morpheus_xx

    Retired Team Member
  • Team MediaPortal
  • March 24, 2007
    12,070
    7,459
    Home Country
    Germany Germany
    • Thread starter
    • Moderator
    • #6
    AW: Incorrect disposal of SlimDX resources?

    yes, correctly
     

    Users who are viewing this thread

    Top Bottom