Author: tabish
Date: Tue Sep 22 20:38:49 2009
New Revision: 817832

URL: http://svn.apache.org/viewvc?rev=817832&view=rev
Log:
Add stop method to unblock clients that are waiting for space.

Modified:
    
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MemoryUsage.cs

Modified: 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MemoryUsage.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MemoryUsage.cs?rev=817832&r1=817831&r2=817832&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MemoryUsage.cs 
(original)
+++ 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MemoryUsage.cs 
Tue Sep 22 20:38:49 2009
@@ -19,147 +19,156 @@
 
 namespace Apache.NMS.Util
 {
-       /// <summary>
-       /// Utility class for Tracking Memory Usage with an imposed limit on 
the amount
-       /// available.  Provides methods for objects to wait on more space to 
become
-       /// available if the memory limit is reached.
-       /// </summary>
-       public class MemoryUsage
-       {
-               private long limit = 0;
-               private long usage = 0;
-               private readonly object myLock = new object();
-
-               public MemoryUsage()
-               {
-               }
-
-               public MemoryUsage( long limit )
-               {
-                       this.limit = limit;
-               }
-
-               #region Property Accessors
-
-               public long Limit
-               {
-                       get { return limit; }
-                       set { limit = value; }
-               }
-
-               public long Usage
-               {
-                       get { return usage; }
-                       set { usage = value; }
-               }
-
-               #endregion
-
-               /// <summary>
-               /// If no space is available then this method blocks until more 
becomes available.
-               /// </summary>
-               public void WaitForSpace()
-               {
-                       TimeSpan indefiniteWait = 
TimeSpan.FromMilliseconds(Timeout.Infinite);
-                       this.WaitForSpace(indefiniteWait);
-               }
-
-               /// <summary>
-               /// If no space is available then this method blocks until more 
becomes available
-               /// or until the specified timeout expires.
-               /// </summary>
-               /// <param name="timeout">
-               /// A <see cref="System.TimeSpan"/>
-               /// </param>
-               public void WaitForSpace( TimeSpan timeout )
-               {
-                       lock(this.myLock)
-                       {
-                               while(this.IsFull())
-                               {
+    /// <summary>
+    /// Utility class for Tracking Memory Usage with an imposed limit on the 
amount
+    /// available.  Provides methods for objects to wait on more space to 
become
+    /// available if the memory limit is reached.
+    /// </summary>
+    public class MemoryUsage
+    {
+        private long limit = 0;
+        private long usage = 0;
+        private readonly object myLock = new object();
+
+        public MemoryUsage()
+        {
+        }
+
+        public MemoryUsage( long limit )
+        {
+            this.limit = limit;
+        }
+
+        #region Property Accessors
+
+        public long Limit
+        {
+            get { return limit; }
+            set { limit = value; }
+        }
+
+        public long Usage
+        {
+            get { return usage; }
+            set { usage = value; }
+        }
+
+        #endregion
+
+        /// <summary>
+        /// If no space is available then this method blocks until more 
becomes available.
+        /// </summary>
+        public void WaitForSpace()
+        {
+            TimeSpan indefiniteWait = 
TimeSpan.FromMilliseconds(Timeout.Infinite);
+            this.WaitForSpace(indefiniteWait);
+        }
+
+        /// <summary>
+        /// If no space is available then this method blocks until more 
becomes available
+        /// or until the specified timeout expires.
+        /// </summary>
+        /// <param name="timeout">
+        /// A <see cref="System.TimeSpan"/>
+        /// </param>
+        public void WaitForSpace( TimeSpan timeout )
+        {
+            lock(this.myLock)
+            {
+                while(this.IsFull())
+                {
 #if !NETCF
-                                       if( !Monitor.Wait(this.myLock, timeout 
) )
+                    if( !Monitor.Wait(this.myLock, timeout ) )
 #endif
-                                       {
-                                               return;
-                                       }
-                               }
-                       }
-               }
-
-               /// <summary>
-               /// Attempts to increase the amount of Memory Used, if non is 
available to fill
-               /// then this method blocks until more is freed.
-               /// </summary>
-               /// <param name="usage">
-               /// A <see cref="System.Int64"/>
-               /// </param>
-               public void EnqueueUsage( long usage )
-               {
-                       this.WaitForSpace();
-                       this.IncreaseUsage(usage);
-               }
-
-               /// <summary>
-               /// Increase the level of Usage.
-               /// </summary>
-               /// <param name="value">
-               /// A <see cref="System.Int64"/>
-               /// </param>
-               public void IncreaseUsage( long value )
-               {
-                       if(value == 0)
-                       {
-                               return;
-                       }
-
-                       lock(this.myLock)
-                       {
-                               this.Usage += value;
-                       }
-               }
-
-               /// <summary>
-               /// Decrease the level of Usage.
-               /// </summary>
-               /// <param name="value">
-               /// A <see cref="System.Int64"/>
-               /// </param>
-               public void DecreaseUsage( long value )
-               {
-                       if(value == 0)
-                       {
-                               return;
-                       }
-
-                       lock(this.myLock)
-                       {
-                               if( value > this.Usage )
-                               {
-                                       this.Usage = 0;
-                               }
-                               else
-                               {
-                                       this.Usage -= value;
-                               }
+                    {
+                        return;
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// Attempts to increase the amount of Memory Used, if non is 
available to fill
+        /// then this method blocks until more is freed.
+        /// </summary>
+        /// <param name="usage">
+        /// A <see cref="System.Int64"/>
+        /// </param>
+        public void EnqueueUsage( long usage )
+        {
+            this.WaitForSpace();
+            this.IncreaseUsage(usage);
+        }
+
+        /// <summary>
+        /// Increase the level of Usage.
+        /// </summary>
+        /// <param name="value">
+        /// A <see cref="System.Int64"/>
+        /// </param>
+        public void IncreaseUsage( long value )
+        {
+            if(value == 0)
+            {
+                return;
+            }
+
+            lock(this.myLock)
+            {
+                this.Usage += value;
+            }
+        }
+
+        /// <summary>
+        /// Decrease the level of Usage.
+        /// </summary>
+        /// <param name="value">
+        /// A <see cref="System.Int64"/>
+        /// </param>
+        public void DecreaseUsage( long value )
+        {
+            if(value == 0)
+            {
+                return;
+            }
+
+            lock(this.myLock)
+            {
+                if( value > this.Usage )
+                {
+                    this.Usage = 0;
+                }
+                else
+                {
+                    this.Usage -= value;
+                }
 
 #if !NETCF
-                               Monitor.PulseAll(this.myLock);
+                Monitor.PulseAll(this.myLock);
 #endif
-                       }
-               }
+            }
+        }
 
-               public bool IsFull()
-               {
-                       bool result = false;
-
-                       lock(this.myLock)
-                       {
-                               result = this.Usage >= this.Limit;
-                       }
-
-                       return result;
-               }
-
-       }
+        public bool IsFull()
+        {
+            bool result = false;
+
+            lock(this.myLock)
+            {
+                result = this.Usage >= this.Limit;
+            }
+
+            return result;
+        }
+
+        public void Stop()
+        {
+            lock(this.myLock)
+            {
+#if !NETCF
+                Monitor.PulseAll(this.myLock);
+#endif
+            }
+        }
+    }
 }


Reply via email to