XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.0
    • 1.1.0
    • ActiveMQ
    • None
    • Patch Available
    • Regression

    Description

      I have been debugging some threading issues in NMS, and I have attached a patch file with some proposed changes to correct the following issues:

      • Some threading issues in Connection, Session, and DispatchingThread
      • it is insufficient to use ArrayList.Synchronized or Hashtable.Synchronized since enumeration is not synchronized. Instead, use regular collections and explicit locking using a private object, myLock
      • instead of Connection.connected, use a volatile single-state-change bool called triedConnect, to add synchronization to CheckConnected without adversely-affecting performance
      • mark as volatile certain bools which have a single state change (e.g., Connection.closed, which starts at false and changes once to true) and then double-check for minimal locking
      • some uses of AtomicBoolean (e.g., Connection.started) offered insufficient code synchronization. Instead, use regular bool and locking of the aforementioned myLock
      • remove Connection.closing field, and instead always accommodate that Connection.RemoveSession modifies the sessions list.
      • instead of (bool) DispatchingThread.m_bStopFlag, use a ManualResetEvent (in addition to the existing AutoResetEvent) to signal the worker thread
      • in TcpTransport, recognize that ShutdownCommand may cause broker to close connection, to avoid a spurious error message
      • accommodate potential ThreadAbortExceptions which can occur from explicitly-aborted worker threads
      • increase the wait for stopping async delivery, from 5 seconds to 30
      • use Interlocked.Increment for thread-safe int increments. (Interlocked.Increment wraps Int32.MaxValue to Int32.MinValue; will this be a problem?)
      • Tweak implementation of IDisposeable in TcpTransport, MutexTransport, TransportFilter, WireFormatNegotiator so finalizers call Dispose

      Thank you,
      Chris

      Attachments

        1. Apache.NMS.ActiveMQ.patch
          31 kB
          Chris Fraire

        Activity

          People

            jgomes Jim Gomes
            cfraire Chris Fraire
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 3h
                3h