Skip to content

non deterministic crash / hangs #1

Description

@retronym

Thanks for writing this agent, its a great intro to JVMTI for would be tinkerers (like me!)

I've tried out the agent in the Scala compiler. I've experienced a race condition of some sort.

Invocation:

 /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java -Xmx256M -Xms32M -agentpath:/code/stackparam/target/release/libstackparam.dylib -Xbootclasspath/a:/Users/jz/scala/2.12.1/lib/jline-2.14.1.jar:/Users/jz/scala/2.12.1/lib/scala-compiler.jar:/Users/jz/scala/2.12.1/lib/scala-library.jar:/Users/jz/scala/2.12.1/lib/scala-parser-combinators_2.12-1.0.4.jar:/Users/jz/scala/2.12.1/lib/scala-reflect.jar:/Users/jz/scala/2.12.1/lib/scala-swing_2.12-2.0.0-M2.jar:/Users/jz/scala/2.12.1/lib/scala-xml_2.12-1.0.6.jar:/Users/jz/scala/2.12.1/lib/scalap-2.12.1.jar -classpath '""' -Dscala.home=/Users/jz/scala/2.12.1 -Dscala.usejavacp=true -Denv.emacs= scala.tools.nsc.Main -Ydebug -J-agentpath:/code/stackparam/target/release/libstackparam.dylib /tmp/a.scala

(or, brew install scala; scalac -J-agentpath:... test.scala)

Success:

scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving method foo
	at scala.reflect.internal.Symbols$Symbol.$anonfun$info$3(Symbols.scala:0) [this=method foo]
	at scala.Function0.apply$mcV$sp(Function0.scala:0) [this=method foo]
	at scala.reflect.internal.Symbols$Symbol.lock(Symbols.scala:0) [this=scala.tools.nsc.typechecker.Typers$Typer$$anon$2@3..., tree=C.this.foo, sym=method foo, pre=C.this.type, site=C.this]
	at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:0) [this=scala.tools.nsc.typechecker.Typers$NormalTyper@2e3..., tree=C.this.foo, sym=method foo, pre=C.this.type, site=C.this]
	at scala.reflect.internal.Symbols$Symbol.cookJavaRawInfo(Symbols.scala:0) [this=scala.tools.nsc.typechecker.Typers$NormalTyper@2e3..., tree=foo, name=foo, mode$4=1, pt$5=?]

...
  /tmp/a.scala, sources=List(a.scala)]
	at scala.tools.nsc.Global$Run.compile(Global.scala:0) [this=scalac Run for:
  /tmp/a.scala, filenames=List(/tmp/a.scala)]
	at scala.tools.nsc.MainClass.doCompile(Main.scala:0) [this=scala.tools.nsc.Main$@548ad73b, compiler=scala.tools.nsc.Global@4c762604]
	at scala.tools.nsc.Driver.process(Driver.scala:0) [this=scala.tools.nsc.Main$@548ad73b, args=[-Ydebug, -J-agentpath:/code/stackparam/target/rel...]
	at scala.tools.nsc.Driver.main(Driver.scala:0) [this=scala.tools.nsc.Main$@548ad73b, args=[-Ydebug, -J-agentpath:/code/stackparam/target/rel...]
	at scala.tools.nsc.Main.main(Main.scala:0) [arg0=[-Ydebug, -J-agentpath:/code/stackparam/target/rel...]
/tmp/a.scala:1: error: recursive method foo needs result type
class C { def foo = bar; def bar = foo }
                                   ^

Hang

Sample: https://gist.github.com/df539bec027279148d0ca0e7ba3d5bea
Spindump: https://gist.github.com/79c6a311c70a4d66613c08e1a1d560aa

Excerpt from GC thread:

    +                                     2513 GenerateOopMap::verify_error(char const*, ...)  (in libjvm.dylib) + 237  [0x10e62fae7]
    +                                       2513 Exceptions::new_exception(Thread*, Symbol*, char const*, Exceptions::ExceptionMsgToUtf8Mode)  (in libjvm.dylib) + 24  [0x10e5ec0e8]
    +                                         2513 Exceptions::new_exception(Thread*, Symbol*, char const*, Handle, Handle, Handle, Exceptions::ExceptionMsgToUtf8Mode)  (in libjvm.dylib) + 181  [0x10e5ec019]
    +                                           2513 java_lang_String::create_from_str(char const*, Thread*)  (in libjvm.dylib) + 59  [0x10e69f38d]

Linking invokedynamic callsites which (sadly) use exceptions as control flow, likely very early in startup.

    +                                                                               2513 MethodHandles::resolve_MemberName(Handle, KlassHandle, Thread*)  (in libjvm.dylib) + 914  [0x10e8027ae]
    +                                                                                 2513 LinkResolver::resolve_static_call(CallInfo&, KlassHandle&, Symbol*, Symbol*, KlassHandle, bool, bool, Thread*)  (in libjvm.dylib) + 83  [0x10e778859]
    +                                                                                   2513 LinkResolver::linktime_resolve_static_method(methodHandle&, KlassHandle, Symbol*, Symbol*, KlassHandle, bool, Thread*)  (in libjvm.dylib) + 79  [0x10e775285]
    +                                                                                     2513 LinkResolver::resolve_method(methodHandle&, KlassHandle, Symbol*, Symbol*, KlassHandle, bool, bool, Thread*)  (in libjvm.dylib) + 651  [0x10e77481b]
    +                                                                                       2513 Exceptions::_throw_msg_cause(Thread*, char const*, int, Symbol*, char const*, Handle)  (in libjvm.dylib) + 46  [0x10e5ec64e]
    +                                                                                         2513 Exceptions::_throw_msg_cause(Thread*, char const*, int, Symbol*, char const*, Handle, Handle, Handle)  (in libjvm.dylib) + 114  [0x10e5ec5fe]
    +                                                                                           2513 Exceptions::new_exception(Thread*, Symbol*, char const*, Handle, Handle, Handle, Exceptions::ExceptionMsgToUtf8Mode)  (in libjvm.dylib) + 361  [0x10e5ec0cd]
    +                                                                                             2513 Exceptions::new_exception(Thread*, Symbol*, Symbol*, JavaCallArguments*, Handle, Handle, Handle)  (in libjvm.dylib) + 40  [0x10e5ebe6e]
    +                                                                                               2513 Exceptions::new_exception(Thread*, Symbol*, Symbol*, JavaCallArguments*, Handle, Handle)  (in libjvm.dylib) + 199  [0x10e5ebd73]
    +                                                                                                 2513 JavaCalls::call_special(JavaValue*, KlassHandle, Symbol*, Symbol*, JavaCallArguments*, Thread*)  (in libjvm.dylib) + 252  [0x10e69804a]
    +                                                                                                   2513 JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)  (in libjvm.dylib) + 1710  [0x10e697bd2]
    +                                                                                                     2513 ???  (in <unknown binary>)  [0x1172787a7]
    +                                                                                                       2513 ???  (in <unknown binary>)  [0x1172802bd]
    +                                                                                                         2513 ???  (in <unknown binary>)  [0x1172802bd]
    +                                                                                                           2513 ???  (in <unknown binary>)  [0x1172802bd]
    +                                                                                                             2513 ???  (in <unknown binary>)  [0x1172802bd]
    +                                                                                                               2513 ???  (in <unknown binary>)  [0x117280040]
    +                                                                                                                 2513 ???  (in <unknown binary>)  [0x117280040]
    +                                                                                                                   2513 ???  (in <unknown binary>)  [0x11728f9f4]
    +                                                                                                                     2513 Java_java_lang_Throwable_fillInStackTrace  (in libjava.dylib) + 20  [0x10f3628e2]
    +                                                                                                                       2513 JVM_FillInStackTrace  (in libjvm.dylib) + 106  [0x10e6f987d]
    +                                                                                                                         2513 java_lang_Throwable::fill_in_stack_trace(Handle, methodHandle)  (in libjvm.dylib) + 159  [0x10e69db9b]
    +                                                                                                                           2513 java_lang_Throwable::fill_in_stack_trace(Handle, methodHandle, Thread*)  (in libjvm.dylib) + 211  [0x10e69d679]
    +                                                                                                                             2513 BacktraceBuilder::BacktraceBuilder(Thread*)  (in libjvm.dylib) + 71  [0x10e69fb21]
    +                                                                                                                               2513 BacktraceBuilder::expand(Thread*)  (in libjvm.dylib) + 86  [0x10e69f730]
    +                                                                                                                                 2513 CollectedHeap::array_allocate(KlassHandle, int, int, Thread*)  (in libjvm.dylib) + 43  [0x10e45cbed]
    +                                                                                                                                   2513 CollectedHeap::common_mem_allocate_noinit(KlassHandle, unsigned long, Thread*)  (in libjvm.dylib) + 140  [0x10e45c9f2]
    +                                                                                                                                     2513 ParallelScavengeHeap::mem_allocate(unsigned long, bool*)  (in libjvm.dylib) + 518  [0x10e846e6e]
    +                                                                                                                                       2513 VMThread::execute(VM_Operation*)  (in libjvm.dylib) + 269  [0x10e961469]
    +                                                                                                                                         2513 Monitor::wait(bool, long, bool)  (in libjvm.dylib) + 222  [0x10e80e0fc]
    +                                                                                                                                           2513 Monitor::IWait(Thread*, long)  (in libjvm.dylib) + 168  [0x10e80df2c]
    +                                                                                                                                             2513 ParkCommon(ParkEvent*, long)  (in libjvm.dylib) + 42  [0x10e80d656]
    +                                                                                                                                               2513 os::PlatformEvent::park()  (in libjvm.dylib) + 192  [0x10e83054a]
    +                                                                                                                                                 2513 _pthread_cond_wait  (in libsystem_pthread.dylib) + 712  [0x7fff8bc4c96a]
    +                                                                                                                                                   2513 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff8bb62c86]

Crash

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000010d58d2c3, pid=50118, tid=0x0000000000002703
#
# JRE version: Java(TM) SE Runtime Environment (8.0_112-b16) (build 1.8.0_112-b16)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.112-b16 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x18d2c3]  void oop_store<unsigned int>(unsigned int*, oopDesc*)+0x93
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/jz/code/stackparam/hs_err_pid50118.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
Abort trap: 6

hs_err_pid50118.log

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions