public void IsOperatorRefCounterTest() { // operator is is increment com ref count - but RCW cleanup free's both references. // (This is a change from .net 3.5 -> 4.0) var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array); var ptr = Marshal.GetIUnknownForObject(item1); Marshal.Release(ptr); int comCount1 = ComDebug.GetComRefCount(item1); int rcwCount1 = ComDebug.GetRcwRefCount(item1); bool test = item1 is nsIArray; int comCount2 = ComDebug.GetComRefCount(item1); int rcwCount2 = ComDebug.GetRcwRefCount(item1); Marshal.AddRef(ptr); int free = Marshal.ReleaseComObject(item1); Assert.AreEqual(0, Marshal.Release(ptr), "Releasing the RCW by ReleaseComObject should have called Release twice."); Assert.AreEqual(1, comCount2 - comCount1); Assert.AreEqual(0, rcwCount2 - rcwCount1); Assert.AreEqual(0, free); }
public void QueryInterfaceRefCounterTest() { var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array); var ptr = Marshal.GetIUnknownForObject(item1); Marshal.Release(ptr); int comCount1 = ComDebug.GetComRefCount(item1); int rcwCount1 = ComDebug.GetRcwRefCount(item1); var item2 = Xpcom.QueryInterface <nsIArray>(item1); int comCount2 = ComDebug.GetComRefCount(item2); int rcwCount2 = ComDebug.GetRcwRefCount(item2); Marshal.AddRef(ptr); int free1 = Marshal.ReleaseComObject(item2); int free2 = Marshal.ReleaseComObject(item1); Assert.AreEqual(0, Marshal.Release(ptr)); Assert.AreEqual(1, comCount2 - comCount1); Assert.AreEqual(1, rcwCount2 - rcwCount1); Assert.AreEqual(1, free1); Assert.AreEqual(0, free2); }
public void GetStringCounter() { var service = Xpcom.GetService2 <nsIXULRuntime>(Contracts.XulRuntime); int comCount = ComDebug.GetComRefCount(service.Instance); int rcwCount = ComDebug.GetRcwRefCount(service.Instance); var os = nsString.Get(service.Instance.GetOSAttribute); int comCount1 = ComDebug.GetComRefCount(service.Instance); int rcwCount1 = ComDebug.GetRcwRefCount(service.Instance); }
public void CreatationRefCounterTest(string contract) { var item = Xpcom.CreateInstance <nsISupports>(contract); int comCount = ComDebug.GetComRefCount(item); int runtimeWrappersCount = ComDebug.GetRcwRefCount(item); int freeCount = Marshal.ReleaseComObject(item); Assert.AreEqual(2, comCount); Assert.AreEqual(1, runtimeWrappersCount); Assert.AreEqual(0, freeCount); }
public void IsOperatorRefCounterTest() { // operator is is NOT increment counters var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array); int comCount1 = ComDebug.GetComRefCount(item1); int rcwCount1 = ComDebug.GetRcwRefCount(item1); bool test = item1 is nsIArray; int comCount2 = ComDebug.GetComRefCount(item1); int rcwCount2 = ComDebug.GetRcwRefCount(item1); int free = Marshal.ReleaseComObject(item1); Assert.AreEqual(0, comCount2 - comCount1); Assert.AreEqual(0, rcwCount2 - rcwCount1); Assert.AreEqual(0, free); }
public void ExplicitOperatorRefCounterTest() { // operator explicit is NOT increment counters var item1 = Xpcom.CreateInstance <nsISupports>(Contracts.Array); int comCount = ComDebug.GetComRefCount(item1); int rcwCount = ComDebug.GetRcwRefCount(item1); nsIArray item2 = (nsIArray)item1; int comCount1 = ComDebug.GetComRefCount(item1); int rcwCount1 = ComDebug.GetRcwRefCount(item1); int comCount2 = ComDebug.GetComRefCount(item2); int rcwCount2 = ComDebug.GetRcwRefCount(item2); int free = Marshal.ReleaseComObject(item2); Assert.AreEqual(0, comCount2 - comCount1); Assert.AreEqual(0, rcwCount2 - rcwCount1); Assert.AreEqual(0, comCount2 - comCount); Assert.AreEqual(0, rcwCount2 - rcwCount); Assert.AreEqual(0, free); }