{"action":"created","comment":{"url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments/71854779","id":71854779,"diff_hunk":"@@ -144,10 +112,218 @@ public boolean hasCompleted() {\n      */\n     @Beta\n     public Throwable getThrowable() {\n-        Object o = state.getLatest();\n-        if (nl.isError(o)) {\n-            return nl.getError(o);\n+        if (state.get() == PublishSubjectState.TERMINATED) {\n+            return state.error;\n         }\n         return null;\n     }\n+    \n+    static final class PublishSubjectState<T> \n+    extends AtomicReference<PublishSubjectProducer<T>[]>\n+    implements OnSubscribe<T>, Observer<T> {\n+\n+        /** */\n+        private static final long serialVersionUID = -7568940796666027140L;\n+        \n+        @SuppressWarnings(\"rawtypes\")\n+        static final PublishSubjectProducer[] EMPTY = new PublishSubjectProducer[0]; \n+        @SuppressWarnings(\"rawtypes\")\n+        static final PublishSubjectProducer[] TERMINATED = new PublishSubjectProducer[0]; \n+        \n+        Throwable error;\n+        \n+        @SuppressWarnings(\"unchecked\")\n+        public PublishSubjectState() {\n+            lazySet(EMPTY);\n+        }\n+        \n+        @Override\n+        public void call(Subscriber<? super T> t) {\n+            PublishSubjectProducer<T> pp = new PublishSubjectProducer<T>(this, t);\n+            t.add(pp);\n+            t.setProducer(pp);\n+            \n+            if (add(pp)) {\n+                if (pp.isUnsubscribed()) {\n+                    remove(pp);\n+                }\n+            } else {\n+                Throwable ex = error;\n+                if (ex != null) {\n+                    t.onError(ex);\n+                } else {\n+                    t.onCompleted();\n+                }\n+            }\n+        }\n+        \n+        \n+        boolean add(PublishSubjectProducer<T> inner) {\n+            for (;;) {\n+                PublishSubjectProducer<T>[] curr = get();\n+                if (curr == TERMINATED) {\n+                    return false;\n+                }\n+                \n+                int n = curr.length;\n+                \n+                @SuppressWarnings(\"unchecked\")\n+                PublishSubjectProducer<T>[] next = new PublishSubjectProducer[n + 1];\n+                System.arraycopy(curr, 0, next, 0, n);\n+                \n+                next[n] = inner;\n+                if (compareAndSet(curr, next)) {\n+                    return true;\n+                }\n+            }\n+        }\n+        \n+        @SuppressWarnings(\"unchecked\")\n+        void remove(PublishSubjectProducer<T> inner) {\n+            for (;;) {\n+                PublishSubjectProducer<T>[] curr = get();\n+                if (curr == TERMINATED || curr == EMPTY) {\n+                    return;\n+                }\n+                \n+                int n = curr.length;\n+                int j = -1;\n+                for (int i = 0; i < n; i++) {\n+                    if (curr[i] == inner) {\n+                        j = i;\n+                        break;\n+                    }\n+                }\n+                \n+                if (j < 0) {\n+                    return;\n+                }\n+                \n+                PublishSubjectProducer<T>[] next;\n+                if (n == 1) {\n+                    next = EMPTY;\n+                } else {\n+                    next = new PublishSubjectProducer[n - 1];\n+                    System.arraycopy(curr, 0, next, 0, j);\n+                    System.arraycopy(curr, j + 1, next, j, n - j - 1);\n+                }\n+                \n+                if (compareAndSet(curr, next)) {\n+                    return;\n+                }\n+            }\n+        }\n+\n+        @Override\n+        public void onNext(T t) {\n+            for (PublishSubjectProducer<T> pp : get()) {\n+                pp.onNext(t);\n+            }\n+        }\n+\n+        @SuppressWarnings(\"unchecked\")\n+        @Override\n+        public void onError(Throwable e) {\n+            error = e;\n+            List<Throwable> errors = null;\n+            for (PublishSubjectProducer<T> pp : getAndSet(TERMINATED)) {\n+                try {\n+                    pp.onError(e);\n+                } catch (Throwable ex) {\n+                    if (errors == null) {\n+                        errors = new ArrayList<Throwable>();\n+                    }\n+                    errors.add(ex);\n+                }\n+            }\n+            \n+            Exceptions.throwIfAny(errors);\n+        }\n+\n+        @SuppressWarnings(\"unchecked\")\n+        @Override\n+        public void onCompleted() {\n+            for (PublishSubjectProducer<T> pp : getAndSet(TERMINATED)) {\n+                pp.onCompleted();\n+            }\n+        }\n+\n+    }\n+    \n+    static final class PublishSubjectProducer<T> \n+    extends AtomicLong\n+    implements Producer, Subscription, Observer<T> {\n+        /** */\n+        private static final long serialVersionUID = 6451806817170721536L;\n+\n+        final PublishSubjectState<T> parent;\n+        \n+        final Subscriber<? super T> actual;\n+        \n+        long produced;\n+        \n+        public PublishSubjectProducer(PublishSubjectState<T> parent, Subscriber<? super T> actual) {\n+            this.parent = parent;\n+            this.actual = actual;\n+        }\n+        \n+        @Override\n+        public void request(long n) {\n+            if (BackpressureUtils.validate(n)) {\n+                for (;;) {\n+                    long r = get();\n+                    if (r == Long.MIN_VALUE) {\n+                        return;\n+                    }\n+                    long u = BackpressureUtils.addCap(r, n);\n+                    if (compareAndSet(r, u)) {\n+                        return;\n+                    }\n+                }\n+            }\n+        }\n+        \n+        @Override\n+        public boolean isUnsubscribed() {\n+            return get() == Long.MIN_VALUE;\n+        }\n+        \n+        @Override\n+        public void unsubscribe() {\n+            if (getAndSet(Long.MIN_VALUE) != Long.MIN_VALUE) {\n+                parent.remove(this);\n+            }\n+        }\n+        \n+        @Override\n+        public void onNext(T t) {\n+            long r = get();\n+            if (r != Long.MIN_VALUE) {\n+                long p = produced;\n+                if (r != p) {\n+                    produced = p + 1;\n+                    actual.onNext(t);\n+                } else {\n+                    unsubscribe();\n+                    actual.onError(new MissingBackpressureException(\"PublishSubject: could not emit value due to lack of requests\"));\n+                }\n+            }\n+        }\n+        \n+        @Override\n+        public void onError(Throwable e) {\n+            long r = get();","path":"src/main/java/rx/subjects/PublishSubject.java","position":332,"original_position":332,"commit_id":"a7ae0f569a5e0aadbf34e56dcd5d135877f8e225","original_commit_id":"a7ae0f569a5e0aadbf34e56dcd5d135877f8e225","user":{"login":"artem-zinnatullin","id":967132,"avatar_url":"https://avatars.githubusercontent.com/u/967132?v=3","gravatar_id":"","url":"https://api.github.com/users/artem-zinnatullin","html_url":"https://github.com/artem-zinnatullin","followers_url":"https://api.github.com/users/artem-zinnatullin/followers","following_url":"https://api.github.com/users/artem-zinnatullin/following{/other_user}","gists_url":"https://api.github.com/users/artem-zinnatullin/gists{/gist_id}","starred_url":"https://api.github.com/users/artem-zinnatullin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/artem-zinnatullin/subscriptions","organizations_url":"https://api.github.com/users/artem-zinnatullin/orgs","repos_url":"https://api.github.com/users/artem-zinnatullin/repos","events_url":"https://api.github.com/users/artem-zinnatullin/events{/privacy}","received_events_url":"https://api.github.com/users/artem-zinnatullin/received_events","type":"User","site_admin":false},"body":"nit: inline","created_at":"2016-07-22T09:55:26Z","updated_at":"2016-07-22T09:55:26Z","html_url":"https://github.com/ReactiveX/RxJava/pull/4225#discussion_r71854779","pull_request_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225","_links":{"self":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments/71854779"},"html":{"href":"https://github.com/ReactiveX/RxJava/pull/4225#discussion_r71854779"},"pull_request":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225"}}},"pull_request":{"url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225","id":78448170,"html_url":"https://github.com/ReactiveX/RxJava/pull/4225","diff_url":"https://github.com/ReactiveX/RxJava/pull/4225.diff","patch_url":"https://github.com/ReactiveX/RxJava/pull/4225.patch","issue_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/4225","number":4225,"state":"open","locked":false,"title":"1.x: PublishSubject fail-fast when backpressured","user":{"login":"akarnokd","id":1269832,"avatar_url":"https://avatars.githubusercontent.com/u/1269832?v=3","gravatar_id":"","url":"https://api.github.com/users/akarnokd","html_url":"https://github.com/akarnokd","followers_url":"https://api.github.com/users/akarnokd/followers","following_url":"https://api.github.com/users/akarnokd/following{/other_user}","gists_url":"https://api.github.com/users/akarnokd/gists{/gist_id}","starred_url":"https://api.github.com/users/akarnokd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akarnokd/subscriptions","organizations_url":"https://api.github.com/users/akarnokd/orgs","repos_url":"https://api.github.com/users/akarnokd/repos","events_url":"https://api.github.com/users/akarnokd/events{/privacy}","received_events_url":"https://api.github.com/users/akarnokd/received_events","type":"User","site_admin":false},"body":"This PR modifies the `PublishSubject` to fail fast if the child Subscriber can't keep up. Therefore, instead of some other operator failing somewhere downstream, the `MissingBackpressureException` now points to the `PublishSubject` instead. \r\n\r\nIn addition, there were complaints in #3850 that cross-unsubscription doesn't stop another Subscriber from receiving events if it comes after the unsubscribe() call in the dispatch loop. Since `PublishSubject` now tracks request - which is the main extra overhead - it is trivial to add the necessary eager check for the unsubscribed state.\r\n\r\nBenchmark comparison (i7 4790, Windows 7 x64, Java 8u102)\r\n\r\n![image](https://cloud.githubusercontent.com/assets/1269832/17052414/a30acf84-4ffd-11e6-88ae-1fc5d28a6d12.png)\r\n\r\nAs expected, this adds some overhead although most noticeably for the mid-range only. Short-lived publishing is now slightly faster even.\r\n\r\nInterestingly, many benchmarks behave oddly in these 1000s range - we could be hitting some JIT threshold. While in other benchmarks, the warmup iteration numbers keep increasing as JIT does its work but here, it starts out quite nicely then drops 25% and stays that way. I'm on windows so JMH -perfasm doesn't work.\r\n\r\nIf this direction is accepted, I'll update `BehaviorSubject`, `timer()` and `interval()` do do the same tracking.","created_at":"2016-07-22T09:23:17Z","updated_at":"2016-07-22T09:55:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7ec01fad341dfb62ed41b03c663cba2d0323c1f6","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/ReactiveX/RxJava/milestones/17","html_url":"https://github.com/ReactiveX/RxJava/milestones/1.2","labels_url":"https://api.github.com/repos/ReactiveX/RxJava/milestones/17/labels","id":1835504,"number":17,"title":"1.2","description":"Promote/demote experimental/beta 1.1.x API","creator":{"login":"akarnokd","id":1269832,"avatar_url":"https://avatars.githubusercontent.com/u/1269832?v=3","gravatar_id":"","url":"https://api.github.com/users/akarnokd","html_url":"https://github.com/akarnokd","followers_url":"https://api.github.com/users/akarnokd/followers","following_url":"https://api.github.com/users/akarnokd/following{/other_user}","gists_url":"https://api.github.com/users/akarnokd/gists{/gist_id}","starred_url":"https://api.github.com/users/akarnokd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akarnokd/subscriptions","organizations_url":"https://api.github.com/users/akarnokd/orgs","repos_url":"https://api.github.com/users/akarnokd/repos","events_url":"https://api.github.com/users/akarnokd/events{/privacy}","received_events_url":"https://api.github.com/users/akarnokd/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":16,"state":"open","created_at":"2016-06-17T23:01:21Z","updated_at":"2016-07-22T09:23:18Z","due_on":"2016-07-30T22:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225/commits","review_comments_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225/comments","review_comment_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/4225/comments","statuses_url":"https://api.github.com/repos/ReactiveX/RxJava/statuses/a7ae0f569a5e0aadbf34e56dcd5d135877f8e225","head":{"label":"akarnokd:PublishSubjectBackpressureFailFast","ref":"PublishSubjectBackpressureFailFast","sha":"a7ae0f569a5e0aadbf34e56dcd5d135877f8e225","user":{"login":"akarnokd","id":1269832,"avatar_url":"https://avatars.githubusercontent.com/u/1269832?v=3","gravatar_id":"","url":"https://api.github.com/users/akarnokd","html_url":"https://github.com/akarnokd","followers_url":"https://api.github.com/users/akarnokd/followers","following_url":"https://api.github.com/users/akarnokd/following{/other_user}","gists_url":"https://api.github.com/users/akarnokd/gists{/gist_id}","starred_url":"https://api.github.com/users/akarnokd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akarnokd/subscriptions","organizations_url":"https://api.github.com/users/akarnokd/orgs","repos_url":"https://api.github.com/users/akarnokd/repos","events_url":"https://api.github.com/users/akarnokd/events{/privacy}","received_events_url":"https://api.github.com/users/akarnokd/received_events","type":"User","site_admin":false},"repo":{"id":14518033,"name":"RxJava","full_name":"akarnokd/RxJava","owner":{"login":"akarnokd","id":1269832,"avatar_url":"https://avatars.githubusercontent.com/u/1269832?v=3","gravatar_id":"","url":"https://api.github.com/users/akarnokd","html_url":"https://github.com/akarnokd","followers_url":"https://api.github.com/users/akarnokd/followers","following_url":"https://api.github.com/users/akarnokd/following{/other_user}","gists_url":"https://api.github.com/users/akarnokd/gists{/gist_id}","starred_url":"https://api.github.com/users/akarnokd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akarnokd/subscriptions","organizations_url":"https://api.github.com/users/akarnokd/orgs","repos_url":"https://api.github.com/users/akarnokd/repos","events_url":"https://api.github.com/users/akarnokd/events{/privacy}","received_events_url":"https://api.github.com/users/akarnokd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/akarnokd/RxJava","description":"RxJava - a library for composing asynchronous and event-based programs using observable sequences for the Java VM.","fork":true,"url":"https://api.github.com/repos/akarnokd/RxJava","forks_url":"https://api.github.com/repos/akarnokd/RxJava/forks","keys_url":"https://api.github.com/repos/akarnokd/RxJava/keys{/key_id}","collaborators_url":"https://api.github.com/repos/akarnokd/RxJava/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/akarnokd/RxJava/teams","hooks_url":"https://api.github.com/repos/akarnokd/RxJava/hooks","issue_events_url":"https://api.github.com/repos/akarnokd/RxJava/issues/events{/number}","events_url":"https://api.github.com/repos/akarnokd/RxJava/events","assignees_url":"https://api.github.com/repos/akarnokd/RxJava/assignees{/user}","branches_url":"https://api.github.com/repos/akarnokd/RxJava/branches{/branch}","tags_url":"https://api.github.com/repos/akarnokd/RxJava/tags","blobs_url":"https://api.github.com/repos/akarnokd/RxJava/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/akarnokd/RxJava/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/akarnokd/RxJava/git/refs{/sha}","trees_url":"https://api.github.com/repos/akarnokd/RxJava/git/trees{/sha}","statuses_url":"https://api.github.com/repos/akarnokd/RxJava/statuses/{sha}","languages_url":"https://api.github.com/repos/akarnokd/RxJava/languages","stargazers_url":"https://api.github.com/repos/akarnokd/RxJava/stargazers","contributors_url":"https://api.github.com/repos/akarnokd/RxJava/contributors","subscribers_url":"https://api.github.com/repos/akarnokd/RxJava/subscribers","subscription_url":"https://api.github.com/repos/akarnokd/RxJava/subscription","commits_url":"https://api.github.com/repos/akarnokd/RxJava/commits{/sha}","git_commits_url":"https://api.github.com/repos/akarnokd/RxJava/git/commits{/sha}","comments_url":"https://api.github.com/repos/akarnokd/RxJava/comments{/number}","issue_comment_url":"https://api.github.com/repos/akarnokd/RxJava/issues/comments{/number}","contents_url":"https://api.github.com/repos/akarnokd/RxJava/contents/{+path}","compare_url":"https://api.github.com/repos/akarnokd/RxJava/compare/{base}...{head}","merges_url":"https://api.github.com/repos/akarnokd/RxJava/merges","archive_url":"https://api.github.com/repos/akarnokd/RxJava/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/akarnokd/RxJava/downloads","issues_url":"https://api.github.com/repos/akarnokd/RxJava/issues{/number}","pulls_url":"https://api.github.com/repos/akarnokd/RxJava/pulls{/number}","milestones_url":"https://api.github.com/repos/akarnokd/RxJava/milestones{/number}","notifications_url":"https://api.github.com/repos/akarnokd/RxJava/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/akarnokd/RxJava/labels{/name}","releases_url":"https://api.github.com/repos/akarnokd/RxJava/releases{/id}","deployments_url":"https://api.github.com/repos/akarnokd/RxJava/deployments","created_at":"2013-11-19T08:04:52Z","updated_at":"2015-11-14T11:39:12Z","pushed_at":"2016-07-22T08:57:10Z","git_url":"git://github.com/akarnokd/RxJava.git","ssh_url":"git@github.com:akarnokd/RxJava.git","clone_url":"https://github.com/akarnokd/RxJava.git","svn_url":"https://github.com/akarnokd/RxJava","homepage":"","size":19292,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":2,"default_branch":"2.x"}},"base":{"label":"ReactiveX:1.x","ref":"1.x","sha":"479df3195f208888fe8cfc91c9ce8367c5b4cc07","user":{"login":"ReactiveX","id":6407041,"avatar_url":"https://avatars.githubusercontent.com/u/6407041?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveX","html_url":"https://github.com/ReactiveX","followers_url":"https://api.github.com/users/ReactiveX/followers","following_url":"https://api.github.com/users/ReactiveX/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveX/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveX/subscriptions","organizations_url":"https://api.github.com/users/ReactiveX/orgs","repos_url":"https://api.github.com/users/ReactiveX/repos","events_url":"https://api.github.com/users/ReactiveX/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveX/received_events","type":"Organization","site_admin":false},"repo":{"id":7508411,"name":"RxJava","full_name":"ReactiveX/RxJava","owner":{"login":"ReactiveX","id":6407041,"avatar_url":"https://avatars.githubusercontent.com/u/6407041?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveX","html_url":"https://github.com/ReactiveX","followers_url":"https://api.github.com/users/ReactiveX/followers","following_url":"https://api.github.com/users/ReactiveX/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveX/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveX/subscriptions","organizations_url":"https://api.github.com/users/ReactiveX/orgs","repos_url":"https://api.github.com/users/ReactiveX/repos","events_url":"https://api.github.com/users/ReactiveX/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveX/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ReactiveX/RxJava","description":"RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.","fork":false,"url":"https://api.github.com/repos/ReactiveX/RxJava","forks_url":"https://api.github.com/repos/ReactiveX/RxJava/forks","keys_url":"https://api.github.com/repos/ReactiveX/RxJava/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ReactiveX/RxJava/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ReactiveX/RxJava/teams","hooks_url":"https://api.github.com/repos/ReactiveX/RxJava/hooks","issue_events_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/events{/number}","events_url":"https://api.github.com/repos/ReactiveX/RxJava/events","assignees_url":"https://api.github.com/repos/ReactiveX/RxJava/assignees{/user}","branches_url":"https://api.github.com/repos/ReactiveX/RxJava/branches{/branch}","tags_url":"https://api.github.com/repos/ReactiveX/RxJava/tags","blobs_url":"https://api.github.com/repos/ReactiveX/RxJava/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ReactiveX/RxJava/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ReactiveX/RxJava/git/refs{/sha}","trees_url":"https://api.github.com/repos/ReactiveX/RxJava/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ReactiveX/RxJava/statuses/{sha}","languages_url":"https://api.github.com/repos/ReactiveX/RxJava/languages","stargazers_url":"https://api.github.com/repos/ReactiveX/RxJava/stargazers","contributors_url":"https://api.github.com/repos/ReactiveX/RxJava/contributors","subscribers_url":"https://api.github.com/repos/ReactiveX/RxJava/subscribers","subscription_url":"https://api.github.com/repos/ReactiveX/RxJava/subscription","commits_url":"https://api.github.com/repos/ReactiveX/RxJava/commits{/sha}","git_commits_url":"https://api.github.com/repos/ReactiveX/RxJava/git/commits{/sha}","comments_url":"https://api.github.com/repos/ReactiveX/RxJava/comments{/number}","issue_comment_url":"https://api.github.com/repos/ReactiveX/RxJava/issues/comments{/number}","contents_url":"https://api.github.com/repos/ReactiveX/RxJava/contents/{+path}","compare_url":"https://api.github.com/repos/ReactiveX/RxJava/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ReactiveX/RxJava/merges","archive_url":"https://api.github.com/repos/ReactiveX/RxJava/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ReactiveX/RxJava/downloads","issues_url":"https://api.github.com/repos/ReactiveX/RxJava/issues{/number}","pulls_url":"https://api.github.com/repos/ReactiveX/RxJava/pulls{/number}","milestones_url":"https://api.github.com/repos/ReactiveX/RxJava/milestones{/number}","notifications_url":"https://api.github.com/repos/ReactiveX/RxJava/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ReactiveX/RxJava/labels{/name}","releases_url":"https://api.github.com/repos/ReactiveX/RxJava/releases{/id}","deployments_url":"https://api.github.com/repos/ReactiveX/RxJava/deployments","created_at":"2013-01-08T20:11:48Z","updated_at":"2016-07-22T09:29:55Z","pushed_at":"2016-07-22T09:35:42Z","git_url":"git://github.com/ReactiveX/RxJava.git","ssh_url":"git@github.com:ReactiveX/RxJava.git","clone_url":"https://github.com/ReactiveX/RxJava.git","svn_url":"https://github.com/ReactiveX/RxJava","homepage":"","size":37347,"stargazers_count":15400,"watchers_count":15400,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2632,"mirror_url":null,"open_issues_count":74,"forks":2632,"open_issues":74,"watchers":15400,"default_branch":"1.x"}},"_links":{"self":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225"},"html":{"href":"https://github.com/ReactiveX/RxJava/pull/4225"},"issue":{"href":"https://api.github.com/repos/ReactiveX/RxJava/issues/4225"},"comments":{"href":"https://api.github.com/repos/ReactiveX/RxJava/issues/4225/comments"},"review_comments":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225/comments"},"review_comment":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ReactiveX/RxJava/pulls/4225/commits"},"statuses":{"href":"https://api.github.com/repos/ReactiveX/RxJava/statuses/a7ae0f569a5e0aadbf34e56dcd5d135877f8e225"}}}}
{"actor":{"display_login":"artem-zinnatullin"}}