@@ -120,34 +120,29 @@ type ByteArrayMemory(bytes: byte[], offset, length) =
120120type SafeUnmanagedMemoryStream =
121121 inherit UnmanagedMemoryStream
122122
123- val mutable private hold : obj
123+ val mutable private holder : obj
124124 val mutable private isDisposed : bool
125125
126- new ( addr , length , hold ) =
126+ new ( addr , length , holder ) =
127127 {
128128 inherit UnmanagedMemoryStream( addr, length)
129- hold = hold
129+ holder = holder
130130 isDisposed = false
131131 }
132132
133- new ( addr : nativeptr < byte >, length : int64 , capacity : int64 , access : FileAccess , hold ) =
133+ new ( addr : nativeptr < byte >, length : int64 , capacity : int64 , access : FileAccess , holder ) =
134134 {
135135 inherit UnmanagedMemoryStream( addr, length, capacity, access)
136- hold = hold
136+ holder = holder
137137 isDisposed = false
138138 }
139139
140- override x.Finalize () =
141- x.Dispose false
142-
143140 override x.Dispose disposing =
144141 base .Dispose disposing
145- if not x.isDisposed then
146- x.hold <- null // Null out so it can be collected.
147- x.isDisposed <- true
142+ x.holder <- null // Null out so it can be collected.
148143
149144[<Sealed>]
150- type RawByteMemory ( addr : nativeptr < byte >, length : int , hold : obj ) =
145+ type RawByteMemory ( addr : nativeptr < byte >, length : int , holder : obj ) =
151146 inherit ByteMemory ()
152147
153148 let check i =
@@ -159,7 +154,7 @@ type RawByteMemory(addr: nativeptr<byte>, length: int, hold: obj) =
159154 raise ( ArgumentOutOfRangeException( " length" ))
160155
161156 override _.Item
162- with get i =
157+ with get i =
163158 check i
164159 NativePtr.add addr i
165160 |> NativePtr.read
@@ -174,7 +169,7 @@ type RawByteMemory(addr: nativeptr<byte>, length: int, hold: obj) =
174169 check ( pos + count - 1 )
175170 System.Text.Encoding.UTF8.GetString( NativePtr.add addr pos, count)
176171
177- override _.ReadBytes ( pos , count ) =
172+ override _.ReadBytes ( pos , count ) =
178173 check pos
179174 check ( pos + count - 1 )
180175 let res = Bytes.zeroCreate count
@@ -194,7 +189,7 @@ type RawByteMemory(addr: nativeptr<byte>, length: int, hold: obj) =
194189 override _.Slice ( pos , count ) =
195190 check pos
196191 check ( pos + count - 1 )
197- RawByteMemory( NativePtr.add addr pos, count, hold ) :> ByteMemory
192+ RawByteMemory( NativePtr.add addr pos, count, holder ) :> ByteMemory
198193
199194 override x.CopyTo stream =
200195 use stream2 = x.AsStream()
@@ -210,10 +205,10 @@ type RawByteMemory(addr: nativeptr<byte>, length: int, hold: obj) =
210205 res
211206
212207 override _.AsStream () =
213- new SafeUnmanagedMemoryStream( addr, int64 length, hold ) :> Stream
208+ new SafeUnmanagedMemoryStream( addr, int64 length, holder ) :> Stream
214209
215210 override _.AsReadOnlyStream () =
216- new SafeUnmanagedMemoryStream( addr, int64 length, int64 length, FileAccess.Read, hold ) :> Stream
211+ new SafeUnmanagedMemoryStream( addr, int64 length, int64 length, FileAccess.Read, holder ) :> Stream
217212
218213[<Struct; NoEquality; NoComparison>]
219214type ReadOnlyByteMemory ( bytes : ByteMemory ) =
@@ -259,17 +254,7 @@ type ByteMemory with
259254 mmf
260255
261256 let accessor = mmf.CreateViewAccessor( 0 L, length, MemoryMappedFileAccess.ReadWrite)
262-
263- let safeHolder =
264- { new obj() with
265- override x.Finalize () =
266- ( x :?> IDisposable ). Dispose ()
267- interface IDisposable with
268- member x.Dispose () =
269- GC.SuppressFinalize x
270- accessor.Dispose()
271- mmf.Dispose() }
272- RawByteMemory.FromUnsafePointer( accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder)
257+ RawByteMemory.FromUnsafePointer( accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, ( mmf, accessor))
273258
274259 static member FromFile ( path , access , ? canShadowCopy : bool ) =
275260 let canShadowCopy = defaultArg canShadowCopy false
@@ -313,19 +298,10 @@ type ByteMemory with
313298 | FileAccess.ReadWrite when not accessor.CanRead || not accessor.CanWrite -> invalidOp " Cannot read or write file"
314299 | _ -> ()
315300
316- let safeHolder =
317- { new obj() with
318- override x.Finalize () =
319- ( x :?> IDisposable ). Dispose ()
320- interface IDisposable with
321- member x.Dispose () =
322- GC.SuppressFinalize x
323- accessor.Dispose()
324- mmf.Dispose() }
325- RawByteMemory.FromUnsafePointer( accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder)
326-
327- static member FromUnsafePointer ( addr , length , hold : obj ) =
328- RawByteMemory( NativePtr.ofNativeInt addr, length, hold) :> ByteMemory
301+ RawByteMemory.FromUnsafePointer( accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, ( mmf, accessor))
302+
303+ static member FromUnsafePointer ( addr , length , holder : obj ) =
304+ RawByteMemory( NativePtr.ofNativeInt addr, length, holder) :> ByteMemory
329305
330306 static member FromArray ( bytes , offset , length ) =
331307 ByteArrayMemory( bytes, offset, length) :> ByteMemory
0 commit comments