Imported Upstream version 4.8.0.309

Former-commit-id: 5f9c6ae75f295e057a7d2971f3a6df4656fa8850
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2016-11-10 13:04:39 +00:00
parent ee1447783b
commit 94b2861243
4912 changed files with 390737 additions and 49310 deletions

View File

@@ -36,4 +36,33 @@ namespace System.Web.Util {
}
}
// This wrapper around a managed object is opaque to SizedReference GC handle
// and therefore helps with calculating size of only relevant graph of objects
internal class DisposableGCHandleRef<T> : IDisposable
where T : class, IDisposable {
GCHandle _handle;
[PermissionSet(SecurityAction.Assert, Unrestricted = true)]
public DisposableGCHandleRef(T t) {
Debug.Assert(t != null);
_handle = GCHandle.Alloc(t);
}
public T Target {
[PermissionSet(SecurityAction.Assert, Unrestricted = true)]
get {
Debug.Assert(_handle.IsAllocated);
return (T)_handle.Target;
}
}
[PermissionSet(SecurityAction.Assert, Unrestricted = true)]
public void Dispose() {
Target.Dispose();
Debug.Assert(_handle.IsAllocated);
if (_handle.IsAllocated) {
_handle.Free();
}
}
}
}