1. 12 Nov, 2015 2 commits
  2. 10 Nov, 2015 1 commit
  3. 06 Nov, 2015 4 commits
  4. 22 Oct, 2015 2 commits
  5. 19 Oct, 2015 2 commits
  6. 30 Jul, 2015 3 commits
  7. 22 Jun, 2015 5 commits
  8. 19 Jun, 2015 2 commits
  9. 17 Jun, 2015 1 commit
  10. 16 Jun, 2015 2 commits
  11. 15 Jun, 2015 1 commit
  12. 11 Jun, 2015 1 commit
  13. 10 Jun, 2015 3 commits
  14. 09 Jun, 2015 1 commit
  15. 08 Jun, 2015 1 commit
    • Dave Cridland's avatar
      Do not synchronize on isClosed() · 389c17c7
      Dave Cridland authored
      There is a deadlock while reading the state variable if close() is running.
      
      This switches the state to be volatile instead - it's only written to inside
      the lengthy close() lock, so this should be reasonable.
      389c17c7
  16. 31 May, 2015 2 commits
  17. 29 May, 2015 5 commits
    • Guus der Kinderen's avatar
      OF-883: Prevent sending data to known disconnected peers. · 3e54c820
      Guus der Kinderen authored
      By closing a session when the new MINA inputClosed() handler is triggered, we run
      the risk of sending data to the peer. As that peer is known to be dead, this is
      pointless (and potentially dangerous - deadlocks have been observed that are likely
      related to this scenario).
      
      To prevent sending data during session closure, the close() method has been
      overloaded with an argument that indicates if the peer is known to be dead. When
      set, its implementation will not attempt to send data.
      3e54c820
    • Dave Cridland's avatar
      OF-910 - Error stanzas to MUC room should remove occupants · b0a11dae
      Dave Cridland authored
      Currently, only stanzas containing errors of type cancel will cause the
      occupant to be removed, however this doesn't appear to catch and remove many
      occupants in practise.
      
      This patch therefore removes occupants from the service on any message or
      presence error stanza, irrespective of the error type. IQ stanzas do not
      trigger the same response, as these may be due to lack of client support
      rather than a vanished occupant.
      b0a11dae
    • Guus der Kinderen's avatar
      OF-883 & OF-881: Avoid potential deadlock with close listeners. · 9e95c34f
      Guus der Kinderen authored
      The close listeners should not be called from within a synchronized block.
      9e95c34f
    • Guus der Kinderen's avatar
      OF-883: Prevent multiple closes of the same connection. · 0cd1edef
      Guus der Kinderen authored
      When a connection is closed, several events can be involved (and can be triggered).
      Some of these events will attempt to close the connection (if it hadn't been already).
      This, at best, least to multiple invocations of close-listeners. At worst, a loop of
      close-calls is created.
      
      This commit replaces the two-way boolean that guards closure (isClosed) with a
      three-way guard. Now, a distinction is made between between a connection that is
      closed, and one that is closing.
      
      Additionally, some null pointer guards have been added, as I've seen those pop up in
      my local logs during development.
      0cd1edef
    • Guus der Kinderen's avatar
  18. 28 May, 2015 2 commits
    • Guus der Kinderen's avatar
      OF-883: Compensate for new half-duplex close of TCP channel in MINA · a6f3a972
      Guus der Kinderen authored
      MINA 2.0.8 introduces support for half-duplex close of TCP channels (see DIRMINA-785).
      As part of this change, IoHandlers got a new method. The default behavior of the
      IoHandlerAdapter closes the MINA session when this handler is triggered. However,
      without an Openfire-specific extension (in ConnectionHandler), this fails to close
      Openfire-maintained resources. As a result, CPUs could start to spin in NIO code,
      resulting in 100% CPU cycles.
      
      To fix this issue, ConnectionHandler now overrides the default functionality and
      triggers a normal closure of the session (both in Openfire as well as MINA context).
      
      Additionally, to prevent the CPU spin, MINA sessions need to be closed synchronously
      (as opposed to the async closure Openfire had up until now). I cannot quite explain
      the need for this change, other than a suspision of race conditions in the async
      setup.
      a6f3a972
    • Guus der Kinderen's avatar