Search code examples
javaandroidmonkey

why System.err.println stuck at write?


Does anyone know why System.err.println is stuck at write? Issue happen during monkey test, check the code, it is stuck at System.err.println(s); here is calling stack:

"main" prio=10 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12c01e18 self=0x793e45ea00
  | sysTid=14489 nice=-8 cgrp=default sched=0/0 handle=0x79c34989a8
  | state=S schedstat=( 893730957 58891353 263 ) utm=66 stm=23 core=1 HZ=100
  | stack=0x7ff175a000-0x7ff175c000 stackSize=8MB
  | held mutexes=
  kernel: __switch_to+0xa4/0xd8
  kernel: pipe_wait+0x6c/0xb8
  kernel: pipe_write+0x1dc/0x444
  kernel: new_sync_write+0xd8/0x124
  kernel: vfs_write+0x15c/0x1d0
  kernel: SyS_write+0x60/0xc0
  kernel: __sys_trace+0x4c/0x4c
  native: #00 pc 000000000007afb4  /system/lib64/libc.so (write+4)
  native: #01 pc 0000000000032e14  /system/lib64/libjavacore.so (???)
  native: #02 pc 0000000000237194  /system/framework/arm64/boot-core-libart.oat (Java_libcore_io_Linux_writeBytes__Ljava_io_FileDescriptor_2Ljava_lang_Object_2II+196)
  at libcore.io.Linux.writeBytes(Native method)
  at libcore.io.Linux.write(Linux.java:288)
  at libcore.io.BlockGuardOs.write(BlockGuardOs.java:345)
  at libcore.io.IoBridge.write(IoBridge.java:553)
  at java.io.FileOutputStream.write(FileOutputStream.java:326)
  at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
  at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
  - locked <0x0ee2596f> (a java.io.BufferedOutputStream)
  at java.io.PrintStream.write(PrintStream.java:505)
  - locked <0x087a167c> (a java.io.PrintStream)
  at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
  at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
  at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
  - locked <0x0ebd8b05> (a java.io.OutputStreamWriter)
  at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
  at java.io.PrintStream.write(PrintStream.java:554)
  - locked <0x087a167c> (a java.io.PrintStream)
  at java.io.PrintStream.print(PrintStream.java:698)
  at java.io.PrintStream.println(PrintStream.java:835)
  - locked <0x087a167c> (a java.io.PrintStream)
  at com.android.commands.monkey.Logger$2.println(Logger.java:37)
  at com.android.commands.monkey.Monkey.commandLineReport(Monkey.java:510)

Solution

  • Most likely what ever is reading System.err isn't consuming the data. Once the buffer fills up, the program will wait until there is space in the buffer to write more.