docs: public void free()
      {
          if (m_messageStackOwner != null)    // Always
              m_messageStackOwner.setMessageStack(null);
          m_messageStackOwner = null;
          if (m_bWaiting)
          {
              synchronized (m_thread)
              {
                  if (m_bWaiting) // Inside the sync block
                      m_stack.removeAllElements();
                  m_bWaiting = false;
                  if (m_thread != null)
                  {
                      m_stack = null;
                      m_thread.interrupt();
                  }
                  m_thread = null;
              }
          }
          m_stack = null;
          m_thread = null;
      }