{"issue":{"pull_request":{"diff_url":null,"html_url":null,"patch_url":null},"state":"closed","user":{"avatar_url":"https://secure.gravatar.com/avatar/3dbfa61ff0ef4f9122da3777f5d8f479?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"3dbfa61ff0ef4f9122da3777f5d8f479","url":"https://api.github.com/users/dweiss","login":"dweiss","id":199470},"milestone":{"state":"open","open_issues":1,"url":"https://api.github.com/repos/carrotsearch/randomizedtesting/milestones/3","due_on":null,"creator":{"avatar_url":"https://secure.gravatar.com/avatar/3dbfa61ff0ef4f9122da3777f5d8f479?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"3dbfa61ff0ef4f9122da3777f5d8f479","url":"https://api.github.com/users/dweiss","login":"dweiss","id":199470},"number":3,"title":"0.0.3","description":null,"closed_issues":1,"created_at":"2011-11-02T11:03:03Z"},"assignee":{"avatar_url":"https://secure.gravatar.com/avatar/3dbfa61ff0ef4f9122da3777f5d8f479?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"3dbfa61ff0ef4f9122da3777f5d8f479","url":"https://api.github.com/users/dweiss","login":"dweiss","id":199470},"updated_at":"2011-11-08T12:47:37Z","labels":[{"name":"feature","color":"02e10c","url":"https://api.github.com/repos/carrotsearch/randomizedtesting/labels/feature"}],"comments":1,"closed_at":"2011-11-08T12:46:48Z","url":"https://api.github.com/repos/carrotsearch/randomizedtesting/issues/18","body":"This is relatively easy: before a test thread (or any other leaked thread?) times out, dump its stack trace several times in short intervals. Collect these stacks and try to determine the \"common ancestor\" part. This helps in better understanding if a thread is blocked and where it loops.","html_url":"https://github.com/carrotsearch/randomizedtesting/issues/18","number":18,"title":"Add stack trace based diagnostics before a test thread times out","id":2152282,"created_at":"2011-11-05T15:08:40Z"},"action":"created","comment":{"user":{"avatar_url":"https://secure.gravatar.com/avatar/3dbfa61ff0ef4f9122da3777f5d8f479?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"3dbfa61ff0ef4f9122da3777f5d8f479","url":"https://api.github.com/users/dweiss","login":"dweiss","id":199470},"updated_at":"2011-11-08T12:47:37Z","url":"https://api.github.com/repos/carrotsearch/randomizedtesting/issues/comments/2667035","body":"Implemented. The output from a test case:\r\n<pre>\r\n5 stack trace probe(s) taken and the constant root was:\r\n    ...\r\n    java.util.Arrays.sort(Arrays.java:1079)\r\n    java.util.Collections.sort(Collections.java:117)\r\n    com.carrotsearch.randomizedtesting.TestRunawayThreadStackProbes$Nested$1.run(TestRunawayThreadStackProbes.java:29)\r\n    java.lang.Thread.run(Thread.java:619)\r\n\r\n    Diverging stack paths from individual probes (if different than the common root):\r\nProbe #1\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    ...\r\nProbe #2\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    ...\r\nProbe #3\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    ...\r\nProbe #4\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    ...\r\nProbe #5\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    ...\r\n\r\nAttempting to terminate thread: Thread-1(#1535043768), currently at:\r\n    java.util.Arrays.mergeSort(Arrays.java:1138)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.mergeSort(Arrays.java:1155)\r\n    java.util.Arrays.mergeSort(Arrays.java:1156)\r\n    java.util.Arrays.sort(Arrays.java:1079)\r\n    java.util.Collections.sort(Collections.java:117)\r\n    com.carrotsearch.randomizedtesting.TestRunawayThreadStackProbes$Nested$1.run(TestRunawayThreadStackProbes.java:29)\r\n    java.lang.Thread.run(Thread.java:619)\r\n\r\nInterrupted a runaway thread: Thread-1(#1535043768)\r\n</pre>","id":2667035,"created_at":"2011-11-08T12:47:37Z"}}