ScheduledRunnable.smali 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. .class public final Lio/reactivex/internal/schedulers/ScheduledRunnable;
  2. .super Ljava/util/concurrent/atomic/AtomicReferenceArray;
  3. .source "ScheduledRunnable.java"
  4. # interfaces
  5. .implements Ljava/lang/Runnable;
  6. .implements Ljava/util/concurrent/Callable;
  7. .implements Lio/reactivex/disposables/Disposable;
  8. # annotations
  9. .annotation system Ldalvik/annotation/Signature;
  10. value = {
  11. "Ljava/util/concurrent/atomic/AtomicReferenceArray<",
  12. "Ljava/lang/Object;",
  13. ">;",
  14. "Ljava/lang/Runnable;",
  15. "Ljava/util/concurrent/Callable<",
  16. "Ljava/lang/Object;",
  17. ">;",
  18. "Lio/reactivex/disposables/Disposable;"
  19. }
  20. .end annotation
  21. # static fields
  22. .field static final DISPOSED:Ljava/lang/Object;
  23. .field static final DONE:Ljava/lang/Object;
  24. .field static final FUTURE_INDEX:I = 0x1
  25. .field static final PARENT_INDEX:I = 0x0
  26. .field private static final serialVersionUID:J = -0x54ef67182406fc25L
  27. # instance fields
  28. .field final actual:Ljava/lang/Runnable;
  29. # direct methods
  30. .method static constructor <clinit>()V
  31. .locals 1
  32. .line 29
  33. new-instance v0, Ljava/lang/Object;
  34. invoke-direct {v0}, Ljava/lang/Object;-><init>()V
  35. sput-object v0, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  36. .line 31
  37. new-instance v0, Ljava/lang/Object;
  38. invoke-direct {v0}, Ljava/lang/Object;-><init>()V
  39. sput-object v0, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  40. return-void
  41. .end method
  42. .method public constructor <init>(Ljava/lang/Runnable;Lio/reactivex/internal/disposables/DisposableContainer;)V
  43. .locals 1
  44. const/4 v0, 0x2
  45. .line 43
  46. invoke-direct {p0, v0}, Ljava/util/concurrent/atomic/AtomicReferenceArray;-><init>(I)V
  47. .line 44
  48. iput-object p1, p0, Lio/reactivex/internal/schedulers/ScheduledRunnable;->actual:Ljava/lang/Runnable;
  49. const/4 p1, 0x0
  50. .line 45
  51. invoke-virtual {p0, p1, p2}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->lazySet(ILjava/lang/Object;)V
  52. return-void
  53. .end method
  54. # virtual methods
  55. .method public call()Ljava/lang/Object;
  56. .locals 1
  57. .line 51
  58. invoke-virtual {p0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->run()V
  59. const/4 v0, 0x0
  60. return-object v0
  61. .end method
  62. .method public dispose()V
  63. .locals 3
  64. :cond_0
  65. const/4 v0, 0x1
  66. .line 98
  67. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  68. move-result-object v1
  69. .line 99
  70. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  71. if-eq v1, v2, :cond_2
  72. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  73. if-ne v1, v2, :cond_1
  74. goto :goto_0
  75. .line 102
  76. :cond_1
  77. invoke-virtual {p0, v0, v1, v2}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  78. move-result v2
  79. if-eqz v2, :cond_0
  80. if-eqz v1, :cond_2
  81. .line 104
  82. check-cast v1, Ljava/util/concurrent/Future;
  83. invoke-interface {v1, v0}, Ljava/util/concurrent/Future;->cancel(Z)Z
  84. :cond_2
  85. :goto_0
  86. const/4 v0, 0x0
  87. .line 111
  88. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  89. move-result-object v1
  90. .line 112
  91. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  92. if-eq v1, v2, :cond_4
  93. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  94. if-eq v1, v2, :cond_4
  95. if-nez v1, :cond_3
  96. goto :goto_1
  97. .line 115
  98. :cond_3
  99. invoke-virtual {p0, v0, v1, v2}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  100. move-result v0
  101. if-eqz v0, :cond_2
  102. .line 116
  103. check-cast v1, Lio/reactivex/internal/disposables/DisposableContainer;
  104. invoke-interface {v1, p0}, Lio/reactivex/internal/disposables/DisposableContainer;->delete(Lio/reactivex/disposables/Disposable;)Z
  105. :cond_4
  106. :goto_1
  107. return-void
  108. .end method
  109. .method public isDisposed()Z
  110. .locals 3
  111. const/4 v0, 0x1
  112. .line 124
  113. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  114. move-result-object v1
  115. .line 125
  116. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  117. if-eq v1, v2, :cond_1
  118. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  119. if-ne v1, v2, :cond_0
  120. goto :goto_0
  121. :cond_0
  122. const/4 v0, 0x0
  123. :cond_1
  124. :goto_0
  125. return v0
  126. .end method
  127. .method public run()V
  128. .locals 5
  129. const/4 v0, 0x1
  130. const/4 v1, 0x0
  131. .line 59
  132. :try_start_0
  133. iget-object v2, p0, Lio/reactivex/internal/schedulers/ScheduledRunnable;->actual:Ljava/lang/Runnable;
  134. invoke-interface {v2}, Ljava/lang/Runnable;->run()V
  135. :try_end_0
  136. .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0
  137. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  138. goto :goto_0
  139. :catchall_0
  140. move-exception v2
  141. goto :goto_1
  142. :catch_0
  143. move-exception v2
  144. .line 62
  145. :try_start_1
  146. invoke-static {v2}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  147. :try_end_1
  148. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  149. .line 65
  150. :goto_0
  151. invoke-virtual {p0, v1}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  152. move-result-object v2
  153. .line 66
  154. sget-object v3, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  155. if-eq v2, v3, :cond_0
  156. if-eqz v2, :cond_0
  157. sget-object v3, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  158. invoke-virtual {p0, v1, v2, v3}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  159. move-result v1
  160. if-eqz v1, :cond_0
  161. .line 67
  162. check-cast v2, Lio/reactivex/internal/disposables/DisposableContainer;
  163. invoke-interface {v2, p0}, Lio/reactivex/internal/disposables/DisposableContainer;->delete(Lio/reactivex/disposables/Disposable;)Z
  164. .line 71
  165. :cond_0
  166. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  167. move-result-object v1
  168. .line 72
  169. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  170. if-eq v1, v2, :cond_1
  171. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  172. invoke-virtual {p0, v0, v1, v2}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  173. move-result v1
  174. if-eqz v1, :cond_0
  175. :cond_1
  176. return-void
  177. .line 65
  178. :goto_1
  179. invoke-virtual {p0, v1}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  180. move-result-object v3
  181. .line 66
  182. sget-object v4, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  183. if-eq v3, v4, :cond_2
  184. if-eqz v3, :cond_2
  185. sget-object v4, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  186. invoke-virtual {p0, v1, v3, v4}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  187. move-result v1
  188. if-eqz v1, :cond_2
  189. .line 67
  190. check-cast v3, Lio/reactivex/internal/disposables/DisposableContainer;
  191. invoke-interface {v3, p0}, Lio/reactivex/internal/disposables/DisposableContainer;->delete(Lio/reactivex/disposables/Disposable;)Z
  192. .line 71
  193. :cond_2
  194. :goto_2
  195. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  196. move-result-object v1
  197. .line 72
  198. sget-object v3, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  199. if-eq v1, v3, :cond_3
  200. sget-object v3, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  201. invoke-virtual {p0, v0, v1, v3}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  202. move-result v1
  203. if-nez v1, :cond_3
  204. goto :goto_2
  205. .line 76
  206. :cond_3
  207. goto :goto_4
  208. :goto_3
  209. throw v2
  210. :goto_4
  211. goto :goto_3
  212. .end method
  213. .method public setFuture(Ljava/util/concurrent/Future;)V
  214. .locals 3
  215. .annotation system Ldalvik/annotation/Signature;
  216. value = {
  217. "(",
  218. "Ljava/util/concurrent/Future<",
  219. "*>;)V"
  220. }
  221. .end annotation
  222. :cond_0
  223. const/4 v0, 0x1
  224. .line 81
  225. invoke-virtual {p0, v0}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->get(I)Ljava/lang/Object;
  226. move-result-object v1
  227. .line 82
  228. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DONE:Ljava/lang/Object;
  229. if-ne v1, v2, :cond_1
  230. return-void
  231. .line 85
  232. :cond_1
  233. sget-object v2, Lio/reactivex/internal/schedulers/ScheduledRunnable;->DISPOSED:Ljava/lang/Object;
  234. if-ne v1, v2, :cond_2
  235. .line 86
  236. invoke-interface {p1, v0}, Ljava/util/concurrent/Future;->cancel(Z)Z
  237. return-void
  238. .line 89
  239. :cond_2
  240. invoke-virtual {p0, v0, v1, p1}, Lio/reactivex/internal/schedulers/ScheduledRunnable;->compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z
  241. move-result v0
  242. if-eqz v0, :cond_0
  243. return-void
  244. .end method