@@ -150,21 +150,28 @@ public static void PutBackInPool(PooledBitReader reader)
150150 /// </summary>
151151 public sealed class PooledBitStream : BitStream , IDisposable
152152 {
153+ private bool isDisposed = false ;
153154 /// <summary>
154155 /// Gets a PooledBitStream from the static BitStreamPool
155156 /// </summary>
156157 /// <returns>PooledBitStream</returns>
157158 public static PooledBitStream Get ( )
158159 {
159- return BitStreamPool . GetStream ( ) ;
160+ PooledBitStream stream = BitStreamPool . GetStream ( ) ;
161+ stream . isDisposed = false ;
162+ return stream ;
160163 }
161164
162165 /// <summary>
163166 /// Returns the PooledBitStream into the static BitStreamPool
164167 /// </summary>
165168 public new void Dispose ( )
166169 {
167- BitStreamPool . PutBackInPool ( this ) ;
170+ if ( ! isDisposed )
171+ {
172+ isDisposed = true ;
173+ BitStreamPool . PutBackInPool ( this ) ;
174+ }
168175 }
169176 }
170177
@@ -173,6 +180,8 @@ public static PooledBitStream Get()
173180 /// </summary>
174181 public sealed class PooledBitWriter : BitWriter , IDisposable
175182 {
183+ private bool isDisposed = false ;
184+
176185 public PooledBitWriter ( Stream stream ) : base ( stream )
177186 {
178187
@@ -184,15 +193,21 @@ public PooledBitWriter(Stream stream) : base(stream)
184193 /// <returns>PooledBitWriter</returns>
185194 public static PooledBitWriter Get ( Stream stream )
186195 {
187- return BitWriterPool . GetWriter ( stream ) ;
196+ PooledBitWriter writer = BitWriterPool . GetWriter ( stream ) ;
197+ writer . isDisposed = false ;
198+ return writer ;
188199 }
189200
190201 /// <summary>
191202 /// Returns the PooledBitWriter into the static BitWriterPool
192203 /// </summary>
193204 public void Dispose ( )
194205 {
195- BitWriterPool . PutBackInPool ( this ) ;
206+ if ( ! isDisposed )
207+ {
208+ isDisposed = true ;
209+ BitWriterPool . PutBackInPool ( this ) ;
210+ }
196211 }
197212 }
198213
@@ -201,6 +216,8 @@ public void Dispose()
201216 /// </summary>
202217 public sealed class PooledBitReader : BitReader , IDisposable
203218 {
219+ private bool isDisposed = false ;
220+
204221 public PooledBitReader ( Stream stream ) : base ( stream )
205222 {
206223 }
@@ -211,15 +228,21 @@ public PooledBitReader(Stream stream) : base(stream)
211228 /// <returns>PooledBitReader</returns>
212229 public static PooledBitReader Get ( Stream stream )
213230 {
214- return BitReaderPool . GetReader ( stream ) ;
231+ PooledBitReader reader = BitReaderPool . GetReader ( stream ) ;
232+ reader . isDisposed = false ;
233+ return reader ;
215234 }
216235
217236 /// <summary>
218237 /// Returns the PooledBitReader into the static BitReaderPool
219238 /// </summary>
220239 public void Dispose ( )
221240 {
222- BitReaderPool . PutBackInPool ( this ) ;
241+ if ( ! isDisposed )
242+ {
243+ isDisposed = true ;
244+ BitReaderPool . PutBackInPool ( this ) ;
245+ }
223246 }
224247 }
225248}
0 commit comments