GitHub PullRequestEvent at 2014-10-06 09:58:07
Repository: awaitility
Actor: johanhaleby
Payload: {"action":"closed","number":10,"pull_request":{"url":"https://api.github.com/repos/jayway/awaitility/pulls/10","id":22271677,"html_url":"https://github.com/jayway/awaitility/pull/10","diff_url":"https://github.com/jayway/awaitility/pull/10.diff","patch_url":"https://github.com/jayway/awaitility/pull/10.patch","issue_url":"https://api.github.com/repos/jayway/awaitility/issues/10","number":10,"state":"closed","locked":false,"title":"Automatic Deadlock Detection","user":{"login":"Turbo87","id":141300,"avatar_url":"https://avatars.githubusercontent.com/u/141300?v=2","gravatar_id":"","url":"https://api.github.com/users/Turbo87","html_url":"https://github.com/Turbo87","followers_url":"https://api.github.com/users/Turbo87/followers","following_url":"https://api.github.com/users/Turbo87/following{/other_user}","gists_url":"https://api.github.com/users/Turbo87/gists{/gist_id}","starred_url":"https://api.github.com/users/Turbo87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Turbo87/subscriptions","organizations_url":"https://api.github.com/users/Turbo87/orgs","repos_url":"https://api.github.com/users/Turbo87/repos","events_url":"https://api.github.com/users/Turbo87/events{/privacy}","received_events_url":"https://api.github.com/users/Turbo87/received_events","type":"User","site_admin":false},"body":"This code will check for deadlocked threads if a `ConditionTimeoutException` is thrown and attaches the thread information to the exception if something is detected.\r\n\r\nThe included `DeadlockDetectionTest` will cause the following exception:\r\n\r\n~~~\r\ncom.jayway.awaitility.core.ConditionTimeoutException: com.jayway.awaitility.core.ConditionFactory.untilAtomic Callable expected (<true> or <true>) but was <false> within 1 seconds.\r\n\tat com.jayway.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:96)\r\n\tat com.jayway.awaitility.core.AbstractHamcrestCondition.await(AbstractHamcrestCondition.java:136)\r\n\tat com.jayway.awaitility.core.ConditionFactory.until(ConditionFactory.java:590)\r\n\tat com.jayway.awaitility.core.ConditionFactory.untilAtomic(ConditionFactory.java:505)\r\n\tat com.jayway.awaitility.core.ConditionFactory.untilTrue(ConditionFactory.java:519)\r\n\tat com.jayway.awaitility.DeadlockDetectionTest.atomicBooleanExample(DeadlockDetectionTest.java:55)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\r\n\tat org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:62)\r\nCaused by: com.jayway.awaitility.core.DeadlockException: Deadlocked threads detected:\r\n\r\n\"Thread-2\" Id=11 BLOCKED on java.lang.Object@72fb24c owned by \"Thread-1\" Id=10\r\n\tat com.jayway.awaitility.DeadlockDetectionTest$2.run(DeadlockDetectionTest.java:45)\r\n\t-  blocked on java.lang.Object@72fb24c\r\n\t-  locked java.lang.Object@6273e11a\r\n\r\n\"Thread-1\" Id=10 BLOCKED on java.lang.Object@6273e11a owned by \"Thread-2\" Id=11\r\n\tat com.jayway.awaitility.DeadlockDetectionTest$1.run(DeadlockDetectionTest.java:31)\r\n\t-  blocked on java.lang.Object@6273e11a\r\n\t-  locked java.lang.Object@72fb24c\r\n\r\n\r\n\tat com.jayway.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:101)\r\n\t... 14 more\r\n~~~\r\n","created_at":"2014-10-06T09:07:04Z","updated_at":"2014-10-06T09:58:07Z","closed_at":"2014-10-06T09:58:06Z","merged_at":"2014-10-06T09:58:06Z","merge_commit_sha":"84e78a27fc02467ac58379dbdf6ea12aaabd9c8b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jayway/awaitility/pulls/10/commits","review_comments_url":"https://api.github.com/repos/jayway/awaitility/pulls/10/comments","review_comment_url":"https://api.github.com/repos/jayway/awaitility/pulls/comments/{number}","comments_url":"https://api.github.com/repos/jayway/awaitility/issues/10/comments","statuses_url":"https://api.github.com/repos/jayway/awaitility/statuses/5c36cb3e2a573b34cd916927b7f21eaf91b23755","head":{"label":"Turbo87:deadlock-detection","ref":"deadlock-detection","sha":"5c36cb3e2a573b34cd916927b7f21eaf91b23755","user":{"login":"Turbo87","id":141300,"avatar_url":"https://avatars.githubusercontent.com/u/141300?v=2","gravatar_id":"","url":"https://api.github.com/users/Turbo87","html_url":"https://github.com/Turbo87","followers_url":"https://api.github.com/users/Turbo87/followers","following_url":"https://api.github.com/users/Turbo87/following{/other_user}","gists_url":"https://api.github.com/users/Turbo87/gists{/gist_id}","starred_url":"https://api.github.com/users/Turbo87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Turbo87/subscriptions","organizations_url":"https://api.github.com/users/Turbo87/orgs","repos_url":"https://api.github.com/users/Turbo87/repos","events_url":"https://api.github.com/users/Turbo87/events{/privacy}","received_events_url":"https://api.github.com/users/Turbo87/received_events","type":"User","site_admin":false},"repo":{"id":24323338,"name":"awaitility","full_name":"Turbo87/awaitility","owner":{"login":"Turbo87","id":141300,"avatar_url":"https://avatars.githubusercontent.com/u/141300?v=2","gravatar_id":"","url":"https://api.github.com/users/Turbo87","html_url":"https://github.com/Turbo87","followers_url":"https://api.github.com/users/Turbo87/followers","following_url":"https://api.github.com/users/Turbo87/following{/other_user}","gists_url":"https://api.github.com/users/Turbo87/gists{/gist_id}","starred_url":"https://api.github.com/users/Turbo87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Turbo87/subscriptions","organizations_url":"https://api.github.com/users/Turbo87/orgs","repos_url":"https://api.github.com/users/Turbo87/repos","events_url":"https://api.github.com/users/Turbo87/events{/privacy}","received_events_url":"https://api.github.com/users/Turbo87/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Turbo87/awaitility","description":"Awaitility is a small Java DSL for synchronizing asynchronous operations","fork":true,"url":"https://api.github.com/repos/Turbo87/awaitility","forks_url":"https://api.github.com/repos/Turbo87/awaitility/forks","keys_url":"https://api.github.com/repos/Turbo87/awaitility/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Turbo87/awaitility/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Turbo87/awaitility/teams","hooks_url":"https://api.github.com/repos/Turbo87/awaitility/hooks","issue_events_url":"https://api.github.com/repos/Turbo87/awaitility/issues/events{/number}","events_url":"https://api.github.com/repos/Turbo87/awaitility/events","assignees_url":"https://api.github.com/repos/Turbo87/awaitility/assignees{/user}","branches_url":"https://api.github.com/repos/Turbo87/awaitility/branches{/branch}","tags_url":"https://api.github.com/repos/Turbo87/awaitility/tags","blobs_url":"https://api.github.com/repos/Turbo87/awaitility/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Turbo87/awaitility/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Turbo87/awaitility/git/refs{/sha}","trees_url":"https://api.github.com/repos/Turbo87/awaitility/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Turbo87/awaitility/statuses/{sha}","languages_url":"https://api.github.com/repos/Turbo87/awaitility/languages","stargazers_url":"https://api.github.com/repos/Turbo87/awaitility/stargazers","contributors_url":"https://api.github.com/repos/Turbo87/awaitility/contributors","subscribers_url":"https://api.github.com/repos/Turbo87/awaitility/subscribers","subscription_url":"https://api.github.com/repos/Turbo87/awaitility/subscription","commits_url":"https://api.github.com/repos/Turbo87/awaitility/commits{/sha}","git_commits_url":"https://api.github.com/repos/Turbo87/awaitility/git/commits{/sha}","comments_url":"https://api.github.com/repos/Turbo87/awaitility/comments{/number}","issue_comment_url":"https://api.github.com/repos/Turbo87/awaitility/issues/comments/{number}","contents_url":"https://api.github.com/repos/Turbo87/awaitility/contents/{+path}","compare_url":"https://api.github.com/repos/Turbo87/awaitility/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Turbo87/awaitility/merges","archive_url":"https://api.github.com/repos/Turbo87/awaitility/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Turbo87/awaitility/downloads","issues_url":"https://api.github.com/repos/Turbo87/awaitility/issues{/number}","pulls_url":"https://api.github.com/repos/Turbo87/awaitility/pulls{/number}","milestones_url":"https://api.github.com/repos/Turbo87/awaitility/milestones{/number}","notifications_url":"https://api.github.com/repos/Turbo87/awaitility/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Turbo87/awaitility/labels{/name}","releases_url":"https://api.github.com/repos/Turbo87/awaitility/releases{/id}","created_at":"2014-09-22T09:55:19Z","updated_at":"2014-09-22T09:56:47Z","pushed_at":"2014-10-06T09:24:36Z","git_url":"git://github.com/Turbo87/awaitility.git","ssh_url":"git@github.com:Turbo87/awaitility.git","clone_url":"https://github.com/Turbo87/awaitility.git","svn_url":"https://github.com/Turbo87/awaitility","homepage":"http://code.google.com/p/awaitility","size":609,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"jayway:master","ref":"master","sha":"a3556f81ef654944df0680a32e8a44b2c7a53c4c","user":{"login":"jayway","id":89926,"avatar_url":"https://avatars.githubusercontent.com/u/89926?v=2","gravatar_id":"","url":"https://api.github.com/users/jayway","html_url":"https://github.com/jayway","followers_url":"https://api.github.com/users/jayway/followers","following_url":"https://api.github.com/users/jayway/following{/other_user}","gists_url":"https://api.github.com/users/jayway/gists{/gist_id}","starred_url":"https://api.github.com/users/jayway/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayway/subscriptions","organizations_url":"https://api.github.com/users/jayway/orgs","repos_url":"https://api.github.com/users/jayway/repos","events_url":"https://api.github.com/users/jayway/events{/privacy}","received_events_url":"https://api.github.com/users/jayway/received_events","type":"Organization","site_admin":false},"repo":{"id":483924,"name":"awaitility","full_name":"jayway/awaitility","owner":{"login":"jayway","id":89926,"avatar_url":"https://avatars.githubusercontent.com/u/89926?v=2","gravatar_id":"","url":"https://api.github.com/users/jayway","html_url":"https://github.com/jayway","followers_url":"https://api.github.com/users/jayway/followers","following_url":"https://api.github.com/users/jayway/following{/other_user}","gists_url":"https://api.github.com/users/jayway/gists{/gist_id}","starred_url":"https://api.github.com/users/jayway/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayway/subscriptions","organizations_url":"https://api.github.com/users/jayway/orgs","repos_url":"https://api.github.com/users/jayway/repos","events_url":"https://api.github.com/users/jayway/events{/privacy}","received_events_url":"https://api.github.com/users/jayway/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jayway/awaitility","description":"Awaitility is a small Java DSL for synchronizing asynchronous operations","fork":false,"url":"https://api.github.com/repos/jayway/awaitility","forks_url":"https://api.github.com/repos/jayway/awaitility/forks","keys_url":"https://api.github.com/repos/jayway/awaitility/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jayway/awaitility/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jayway/awaitility/teams","hooks_url":"https://api.github.com/repos/jayway/awaitility/hooks","issue_events_url":"https://api.github.com/repos/jayway/awaitility/issues/events{/number}","events_url":"https://api.github.com/repos/jayway/awaitility/events","assignees_url":"https://api.github.com/repos/jayway/awaitility/assignees{/user}","branches_url":"https://api.github.com/repos/jayway/awaitility/branches{/branch}","tags_url":"https://api.github.com/repos/jayway/awaitility/tags","blobs_url":"https://api.github.com/repos/jayway/awaitility/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jayway/awaitility/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jayway/awaitility/git/refs{/sha}","trees_url":"https://api.github.com/repos/jayway/awaitility/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jayway/awaitility/statuses/{sha}","languages_url":"https://api.github.com/repos/jayway/awaitility/languages","stargazers_url":"https://api.github.com/repos/jayway/awaitility/stargazers","contributors_url":"https://api.github.com/repos/jayway/awaitility/contributors","subscribers_url":"https://api.github.com/repos/jayway/awaitility/subscribers","subscription_url":"https://api.github.com/repos/jayway/awaitility/subscription","commits_url":"https://api.github.com/repos/jayway/awaitility/commits{/sha}","git_commits_url":"https://api.github.com/repos/jayway/awaitility/git/commits{/sha}","comments_url":"https://api.github.com/repos/jayway/awaitility/comments{/number}","issue_comment_url":"https://api.github.com/repos/jayway/awaitility/issues/comments/{number}","contents_url":"https://api.github.com/repos/jayway/awaitility/contents/{+path}","compare_url":"https://api.github.com/repos/jayway/awaitility/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jayway/awaitility/merges","archive_url":"https://api.github.com/repos/jayway/awaitility/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jayway/awaitility/downloads","issues_url":"https://api.github.com/repos/jayway/awaitility/issues{/number}","pulls_url":"https://api.github.com/repos/jayway/awaitility/pulls{/number}","milestones_url":"https://api.github.com/repos/jayway/awaitility/milestones{/number}","notifications_url":"https://api.github.com/repos/jayway/awaitility/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jayway/awaitility/labels{/name}","releases_url":"https://api.github.com/repos/jayway/awaitility/releases{/id}","created_at":"2010-01-22T15:12:52Z","updated_at":"2014-10-02T23:00:49Z","pushed_at":"2014-10-06T09:58:06Z","git_url":"git://github.com/jayway/awaitility.git","ssh_url":"git@github.com:jayway/awaitility.git","clone_url":"https://github.com/jayway/awaitility.git","svn_url":"https://github.com/jayway/awaitility","homepage":"http://code.google.com/p/awaitility","size":1511,"stargazers_count":65,"watchers_count":65,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":3,"forks":10,"open_issues":3,"watchers":65,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jayway/awaitility/pulls/10"},"html":{"href":"https://github.com/jayway/awaitility/pull/10"},"issue":{"href":"https://api.github.com/repos/jayway/awaitility/issues/10"},"comments":{"href":"https://api.github.com/repos/jayway/awaitility/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/jayway/awaitility/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/jayway/awaitility/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/jayway/awaitility/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/jayway/awaitility/statuses/5c36cb3e2a573b34cd916927b7f21eaf91b23755"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"johanhaleby","id":187029,"avatar_url":"https://avatars.githubusercontent.com/u/187029?v=2","gravatar_id":"","url":"https://api.github.com/users/johanhaleby","html_url":"https://github.com/johanhaleby","followers_url":"https://api.github.com/users/johanhaleby/followers","following_url":"https://api.github.com/users/johanhaleby/following{/other_user}","gists_url":"https://api.github.com/users/johanhaleby/gists{/gist_id}","starred_url":"https://api.github.com/users/johanhaleby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johanhaleby/subscriptions","organizations_url":"https://api.github.com/users/johanhaleby/orgs","repos_url":"https://api.github.com/users/johanhaleby/repos","events_url":"https://api.github.com/users/johanhaleby/events{/privacy}","received_events_url":"https://api.github.com/users/johanhaleby/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"commits":1,"additions":112,"deletions":1,"changed_files":3}}