1515 */
1616package rx .internal .util ;
1717
18- import java .util .ArrayList ;
19- import java .util .Arrays ;
20- import java .util .Collection ;
21- import java .util .LinkedList ;
22- import java .util .List ;
23- import java .util .concurrent .locks .ReentrantLock ;
18+ import java .util .*;
2419
2520import rx .Subscription ;
2621import rx .exceptions .Exceptions ;
@@ -34,7 +29,6 @@ public final class SubscriptionList implements Subscription {
3429
3530 private LinkedList <Subscription > subscriptions ;
3631 private volatile boolean unsubscribed ;
37- private final ReentrantLock lock = new ReentrantLock ();
3832
3933 public SubscriptionList () {
4034 }
@@ -66,8 +60,7 @@ public void add(final Subscription s) {
6660 return ;
6761 }
6862 if (!unsubscribed ) {
69- lock .lock ();
70- try {
63+ synchronized (this ) {
7164 if (!unsubscribed ) {
7265 LinkedList <Subscription > subs = subscriptions ;
7366 if (subs == null ) {
@@ -77,8 +70,6 @@ public void add(final Subscription s) {
7770 subs .add (s );
7871 return ;
7972 }
80- } finally {
81- lock .unlock ();
8273 }
8374 }
8475 // call after leaving the synchronized block so we're not holding a lock while executing this
@@ -88,15 +79,12 @@ public void add(final Subscription s) {
8879 public void remove (final Subscription s ) {
8980 if (!unsubscribed ) {
9081 boolean unsubscribe = false ;
91- lock .lock ();
92- try {
82+ synchronized (this ) {
9383 LinkedList <Subscription > subs = subscriptions ;
9484 if (unsubscribed || subs == null ) {
9585 return ;
9686 }
9787 unsubscribe = subs .remove (s );
98- } finally {
99- lock .unlock ();
10088 }
10189 if (unsubscribe ) {
10290 // if we removed successfully we then need to call unsubscribe on it (outside of the lock)
@@ -113,16 +101,13 @@ public void remove(final Subscription s) {
113101 public void unsubscribe () {
114102 if (!unsubscribed ) {
115103 List <Subscription > list ;
116- lock .lock ();
117- try {
104+ synchronized (this ) {
118105 if (unsubscribed ) {
119106 return ;
120107 }
121108 unsubscribed = true ;
122109 list = subscriptions ;
123110 subscriptions = null ;
124- } finally {
125- lock .unlock ();
126111 }
127112 // we will only get here once
128113 unsubscribeFromAll (list );
@@ -150,12 +135,9 @@ private static void unsubscribeFromAll(Collection<Subscription> subscriptions) {
150135 public void clear () {
151136 if (!unsubscribed ) {
152137 List <Subscription > list ;
153- lock .lock ();
154- try {
138+ synchronized (this ) {
155139 list = subscriptions ;
156140 subscriptions = null ;
157- } finally {
158- lock .unlock ();
159141 }
160142 unsubscribeFromAll (list );
161143 }
@@ -166,11 +148,8 @@ public void clear() {
166148 */
167149 public boolean hasSubscriptions () {
168150 if (!unsubscribed ) {
169- lock .lock ();
170- try {
151+ synchronized (this ) {
171152 return !unsubscribed && subscriptions != null && !subscriptions .isEmpty ();
172- } finally {
173- lock .unlock ();
174153 }
175154 }
176155 return false ;
0 commit comments