private static void FreeChapter(IntPtr buffer, int valueOffset, object iaccessor) { Debug.Assert(0 == valueOffset % 8, "unexpected unaligned ptr offset"); UnsafeNativeMethods.IChapteredRowset chapteredRowset = (iaccessor as UnsafeNativeMethods.IChapteredRowset) !; IntPtr chapter = SafeNativeMethods.InterlockedExchangePointer(ADP.IntPtrOffset(buffer, valueOffset), ADP.PtrZero); if (ODB.DB_NULL_HCHAPTER != chapter) { chapteredRowset.ReleaseChapter(chapter, out _); } }
private static void FreeChapter(IntPtr buffer, int valueOffset, object iaccessor) { UnsafeNativeMethods.IChapteredRowset rowset = iaccessor as UnsafeNativeMethods.IChapteredRowset; IntPtr ptr = SafeNativeMethods.InterlockedExchangePointer(ADP.IntPtrOffset(buffer, valueOffset), ADP.PtrZero); if (ODB.DB_NULL_HCHAPTER != ptr) { int num; Bid.Trace("<oledb.IChapteredRowset.ReleaseChapter|API|OLEDB> Chapter=%Id\n", ptr); OleDbHResult result = rowset.ReleaseChapter(ptr, out num); Bid.Trace("<oledb.IChapteredRowset.ReleaseChapter|API|OLEDB|RET> %08X{HRESULT}, RefCount=%d\n", result, num); } }
// this correctly does not have a ReliabilityContract, will not be called via ReleaseHandle static private void FreeChapter(IntPtr buffer, int valueOffset, object iaccessor) { Debug.Assert(0 == valueOffset % 8, "unexpected unaligned ptr offset"); UnsafeNativeMethods.IChapteredRowset chapteredRowset = (iaccessor as UnsafeNativeMethods.IChapteredRowset); IntPtr chapter = SafeNativeMethods.InterlockedExchangePointer(ADP.IntPtrOffset(buffer, valueOffset), ADP.PtrZero); if (ODB.DB_NULL_HCHAPTER != chapter) { int refCount; Bid.Trace("<oledb.IChapteredRowset.ReleaseChapter|API|OLEDB> Chapter=%Id\n", chapter); OleDbHResult hr = chapteredRowset.ReleaseChapter(chapter, out refCount); Bid.Trace("<oledb.IChapteredRowset.ReleaseChapter|API|OLEDB|RET> %08X{HRESULT}, RefCount=%d\n", hr, refCount); } }