.class public abstract Lkotlinx/coroutines/internal/Segment; .super Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; .source "SourceFile" # interfaces .implements Lkotlinx/coroutines/NotCompleted; # static fields .field public static final cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; # instance fields .field private volatile cleanedAndPointers:I .field public final id:J # direct methods .method static constructor ()V .locals 2 const-class v0, Lkotlinx/coroutines/internal/Segment; const-string v1, "cleanedAndPointers" invoke-static {v0, v1}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; move-result-object v0 sput-object v0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; return-void .end method .method public constructor (JLkotlinx/coroutines/internal/Segment;I)V .locals 0 .line 198 invoke-direct {p0, p3}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V iput-wide p1, p0, Lkotlinx/coroutines/internal/Segment;->id:J shl-int/lit8 p1, p4, 0x10 iput p1, p0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers:I return-void .end method # virtual methods .method public final decPointers$kotlinx_coroutines_core()Z .locals 2 sget-object v0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; const/high16 v1, -0x10000 .line 228 invoke-virtual {v0, p0, v1}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->addAndGet(Ljava/lang/Object;I)I move-result v0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/Segment;->getNumberOfSlots()I move-result v1 if-ne v0, v1, :cond_0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->isTail()Z move-result v0 if-nez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public abstract getNumberOfSlots()I .end method .method public isRemoved()Z .locals 2 sget-object v0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; .line 222 invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->get(Ljava/lang/Object;)I move-result v0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/Segment;->getNumberOfSlots()I move-result v1 if-ne v0, v1, :cond_0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->isTail()Z move-result v0 if-nez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public abstract onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V .end method .method public final onSlotCleaned()V .locals 2 sget-object v0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; .line 247 invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->incrementAndGet(Ljava/lang/Object;)I move-result v0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/Segment;->getNumberOfSlots()I move-result v1 if-ne v0, v1, :cond_0 invoke-virtual {p0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->remove()V :cond_0 return-void .end method .method public final tryIncPointers$kotlinx_coroutines_core()Z .locals 3 sget-object v0, Lkotlinx/coroutines/internal/Segment;->cleanedAndPointers$FU:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; .line 252 :cond_0 invoke-virtual {v0, p0}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->get(Ljava/lang/Object;)I move-result v1 .line 225 invoke-virtual {p0}, Lkotlinx/coroutines/internal/Segment;->getNumberOfSlots()I move-result v2 if-ne v1, v2, :cond_2 invoke-virtual {p0}, Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;->isTail()Z move-result v2 if-eqz v2, :cond_1 goto :goto_0 :cond_1 const/4 v0, 0x0 goto :goto_1 :cond_2 :goto_0 const/high16 v2, 0x10000 add-int/2addr v2, v1 .line 255 invoke-virtual {v0, p0, v1, v2}, Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->compareAndSet(Ljava/lang/Object;II)Z move-result v1 if-eqz v1, :cond_0 const/4 v0, 0x1 :goto_1 return v0 .end method