Explorar o código

Make HSessionObj implement IDisposable (#10)

* Make HSessionObj implement IDisposable, so that objects that have handles created to them are disposed when the handles are closed.

* Spelling fix: GenertateObjectId -> GenerateObjectId
Stary 2001 %!s(int64=8) %!d(string=hai) anos
pai
achega
2f2b60db4c

+ 1 - 1
Ryujinx/OsHle/Handles/HDomain.cs

@@ -17,7 +17,7 @@ namespace Ryujinx.OsHle.Handles
             ObjIds = new IdPool();
         }
 
-        public int GenertateObjectId(object Obj)
+        public int GenerateObjectId(object Obj)
         {
             int Id = ObjIds.GenerateId();
 

+ 19 - 1
Ryujinx/OsHle/Handles/HSessionObj.cs

@@ -1,6 +1,8 @@
+using System;
+
 namespace Ryujinx.OsHle.Handles
 {
-    class HSessionObj : HSession
+    class HSessionObj : HSession, IDisposable
     {
         public object Obj { get; private set; }
 
@@ -8,5 +10,21 @@ namespace Ryujinx.OsHle.Handles
         {
             this.Obj = Obj;
         }
+
+        public void Dispose()
+        {
+            Dispose(true);
+        }
+
+        protected virtual void Dispose(bool Disposing)
+        {
+            if(Disposing && Obj != null)
+            {
+                if(Obj is IDisposable DisposableObj)
+                {
+                    DisposableObj.Dispose();
+                }
+            }
+        }
     }
 }

+ 1 - 1
Ryujinx/OsHle/Ipc/IpcHandler.cs

@@ -212,7 +212,7 @@ namespace Ryujinx.OsHle.Ipc
 
             Ns.Os.Handles.ReplaceData(HndId, Dom);
 
-            return FillResponse(Response, 0, Dom.GenertateObjectId(Dom));
+            return FillResponse(Response, 0, Dom.GenerateObjectId(Dom));
         }
 
         private static IpcMessage IpcDuplicateSessionEx(

+ 1 - 1
Ryujinx/OsHle/Objects/ObjHelper.cs

@@ -9,7 +9,7 @@ namespace Ryujinx.OsHle.Objects
         {
             if (Context.Session is HDomain Dom)
             {
-                Context.Response.ResponseObjIds.Add(Dom.GenertateObjectId(Obj));
+                Context.Response.ResponseObjIds.Add(Dom.GenerateObjectId(Obj));
             }
             else
             {