Uploaded image for project: 'MINA SSHD'
  1. MINA SSHD
  2. SSHD-152

Logging may cause deadlock.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Won't Fix
    • 0.5.0
    • None
    • None

    Description

      I'm not really sure what I did but I think I somehow managed to deadlock my system using SSHD in combination with Logback console appender.

      Thread 1

      Thread [Thread-21] (Suspended)	
      	owns: ChannelOutputStream  (id=481)	
      	owns: ConsoleOutputStream  (id=482)	
      	owns: PrintStream  (id=483)	
      	owns: Object  (id=202)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [NioProcessor-2] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      		waited by: Thread [...] (Suspended)	
      	owns: OutputStreamWriter  (id=484)	
      	waiting for: Window  (id=485)	
      	Object.wait(long) line: not available [native method]	
      	Window(Object).wait() line: 503	
      	Window.waitForSpace() line: 146	
      	ChannelOutputStream.flush() line: 104	
      	ConsoleOutputStream.flush() line: 97	
      	ConsoleOutputStream.write(int) line: 83	
      	ConsoleOutputStream(OutputStream).write(byte[], int, int) line: 116	
      	PrintStream.write(byte[], int, int) line: 480	
      	PrintStream(FilterOutputStream).write(byte[]) line: 97	
      	ThreadPrintStream.write(byte[]) line: 245	
      	ConsoleTarget$1.write(byte[]) line: 36	
      	PatternLayoutEncoder(LayoutWrappingEncoder<E>).doEncode(E) line: 103	
      	ConsoleAppender<E>(OutputStreamAppender<E>).writeOut(E) line: 193	
      	ConsoleAppender<E>(OutputStreamAppender<E>).subAppend(E) line: 217	
      	ConsoleAppender<E>(OutputStreamAppender<E>).append(E) line: 108	
      	ConsoleAppender<E>(UnsynchronizedAppenderBase<E>).doAppend(E) line: 88	
      	AppenderAttachableImpl<E>.appendLoopOnAppenders(E) line: 64	
      	Logger.appendLoopOnAppenders(ILoggingEvent) line: 285	
      	Logger.callAppenders(ILoggingEvent) line: 272	
      	Logger.buildLoggingEventAndAppend(String, Marker, Level, String, Object[], Throwable) line: 473	
      	Logger.filterAndLog_2(String, Marker, Level, String, Object, Object, Throwable) line: 464	
      	Logger.debug(String, Object, Object) line: 542	
      	ChannelOutputStream.flush() line: 119	
      	...
      

      Thread 2

      Thread [NioProcessor-2] (Suspended)	
      	owns: Object  (id=150)	
      	waiting for: Object  (id=202)	
      		owned by: Thread [Thread-21] (Suspended)	
      			waiting for: Window  (id=485)	
      	ConsoleAppender<E>(OutputStreamAppender<E>).subAppend(E) line: 217	
      	ConsoleAppender<E>(OutputStreamAppender<E>).append(E) line: 108	
      	ConsoleAppender<E>(UnsynchronizedAppenderBase<E>).doAppend(E) line: 88	
      	AppenderAttachableImpl<E>.appendLoopOnAppenders(E) line: 64	
      	Logger.appendLoopOnAppenders(ILoggingEvent) line: 285	
      	Logger.callAppenders(ILoggingEvent) line: 272	
      	Logger.buildLoggingEventAndAppend(String, Marker, Level, String, Object[], Throwable) line: 473	
      	Logger.filterAndLog_1(String, Marker, Level, String, Object, Throwable) line: 445	
      	Logger.debug(String, Object) line: 538	
      	ServerSession.handleMessage(Buffer) line: 119	
      	...
      

      I think that one thread is waiting for Window to expand. The SSHD logger has a console appender. Unfortunately, the wait happends within a write by console appender. Thus all other threads that also log to the console will block because they wait for the Logback console appender lock.

      I think that a Logback console appender should not write to the SSHD console by default. Can this be disabled somehow?

      Attachments

        Issue Links

          Activity

            People

              gnodet Guillaume Nodet
              gunnar Gunnar Wagenknecht
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: