public class org.jruby.ext.thread.Queue extends org.jruby.RubyObject implements org.jruby.runtime.marshal.DataType
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.ext.thread.Queue
  super_class: org.jruby.RubyObject
{
  protected volatile boolean closed;
    descriptor: Z
    flags: (0x0044) ACC_PROTECTED, ACC_VOLATILE

  protected volatile int capacity;
    descriptor: I
    flags: (0x0044) ACC_PROTECTED, ACC_VOLATILE

  protected final java.util.concurrent.atomic.AtomicInteger count;
    descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  transient org.jruby.ext.thread.Queue$Node head;
    descriptor: Lorg/jruby/ext/thread/Queue$Node;
    flags: (0x0080) ACC_TRANSIENT

  protected transient org.jruby.ext.thread.Queue$Node last;
    descriptor: Lorg/jruby/ext/thread/Queue$Node;
    flags: (0x0084) ACC_PROTECTED, ACC_TRANSIENT

  protected final java.util.concurrent.locks.ReentrantLock takeLock;
    descriptor: Ljava/util/concurrent/locks/ReentrantLock;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final java.util.concurrent.locks.Condition notEmpty;
    descriptor: Ljava/util/concurrent/locks/Condition;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final java.util.concurrent.locks.ReentrantLock putLock;
    descriptor: Ljava/util/concurrent/locks/ReentrantLock;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final java.util.concurrent.locks.Condition notFull;
    descriptor: Ljava/util/concurrent/locks/Condition;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private static final org.jruby.RubyThread$Task<org.jruby.ext.thread.Queue, org.jruby.runtime.builtin.IRubyObject> BLOCKING_POP_TASK;
    descriptor: Lorg/jruby/RubyThread$Task;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/jruby/RubyThread$Task<Lorg/jruby/ext/thread/Queue;Lorg/jruby/runtime/builtin/IRubyObject;>;

  private static final org.jruby.RubyThread$Task<org.jruby.ext.thread.Queue, org.jruby.runtime.builtin.IRubyObject> NONBLOCKING_POP_TASK;
    descriptor: Lorg/jruby/RubyThread$Task;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/jruby/RubyThread$Task<Lorg/jruby/ext/thread/Queue;Lorg/jruby/runtime/builtin/IRubyObject;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 581
            new org.jruby.ext.thread.Queue$1
            dup
            invokespecial org.jruby.ext.thread.Queue$1.<init>:()V
            putstatic org.jruby.ext.thread.Queue.BLOCKING_POP_TASK:Lorg/jruby/RubyThread$Task;
         1: .line 590
            new org.jruby.ext.thread.Queue$2
            dup
            invokespecial org.jruby.ext.thread.Queue$2.<init>:()V
            putstatic org.jruby.ext.thread.Queue.NONBLOCKING_POP_TASK:Lorg/jruby/RubyThread$Task;
         2: .line 602
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  protected void signalNotEmpty();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 183
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 1 /* takeLock */
        start local 1 // java.util.concurrent.locks.ReentrantLock takeLock
         1: .line 184
            aload 1 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         2: .line 186
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
         3: .line 187
            goto 7
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Throwable
         4: astore 2
         5: .line 188
            aload 1 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         6: .line 189
            aload 2
            athrow
         7: .line 188
      StackMap locals:
      StackMap stack:
            aload 1 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         8: .line 190
            return
        end local 1 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/jruby/ext/thread/Queue;
            1    9     1  takeLock  Ljava/util/concurrent/locks/ReentrantLock;
      Exception table:
        from    to  target  type
           2     4       4  any

  protected void signalNotFull();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 196
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 1 /* putLock */
        start local 1 // java.util.concurrent.locks.ReentrantLock putLock
         1: .line 197
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         2: .line 199
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
         3: .line 200
            goto 7
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Throwable
         4: astore 2
         5: .line 201
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         6: .line 202
            aload 2
            athrow
         7: .line 201
      StackMap locals:
      StackMap stack:
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         8: .line 203
            return
        end local 1 // java.util.concurrent.locks.ReentrantLock putLock
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/jruby/ext/thread/Queue;
            1    9     1  putLock  Ljava/util/concurrent/locks/ReentrantLock;
      Exception table:
        from    to  target  type
           2     4       4  any

  protected void enqueue(org.jruby.ext.thread.Queue$Node);
    descriptor: (Lorg/jruby/ext/thread/Queue$Node;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.ext.thread.Queue$Node node
         0: .line 206
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.last:Lorg/jruby/ext/thread/Queue$Node;
            aload 1 /* node */
            dup_x1
            putfield org.jruby.ext.thread.Queue$Node.next:Lorg/jruby/ext/thread/Queue$Node;
            putfield org.jruby.ext.thread.Queue.last:Lorg/jruby/ext/thread/Queue$Node;
         1: .line 207
            return
        end local 1 // org.jruby.ext.thread.Queue$Node node
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/jruby/ext/thread/Queue;
            0    2     1  node  Lorg/jruby/ext/thread/Queue$Node;
    MethodParameters:
      Name  Flags
      node  

  protected org.jruby.runtime.builtin.IRubyObject dequeue();
    descriptor: ()Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 210
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.head:Lorg/jruby/ext/thread/Queue$Node;
            astore 1 /* h */
        start local 1 // org.jruby.ext.thread.Queue$Node h
         1: .line 211
            aload 1 /* h */
            getfield org.jruby.ext.thread.Queue$Node.next:Lorg/jruby/ext/thread/Queue$Node;
            astore 2 /* first */
        start local 2 // org.jruby.ext.thread.Queue$Node first
         2: .line 212
            aload 1 /* h */
            aload 1 /* h */
            putfield org.jruby.ext.thread.Queue$Node.next:Lorg/jruby/ext/thread/Queue$Node;
         3: .line 213
            aload 0 /* this */
            aload 2 /* first */
            putfield org.jruby.ext.thread.Queue.head:Lorg/jruby/ext/thread/Queue$Node;
         4: .line 214
            aload 2 /* first */
            getfield org.jruby.ext.thread.Queue$Node.item:Lorg/jruby/runtime/builtin/IRubyObject;
            astore 3 /* x */
        start local 3 // org.jruby.runtime.builtin.IRubyObject x
         5: .line 215
            aload 2 /* first */
            aconst_null
            putfield org.jruby.ext.thread.Queue$Node.item:Lorg/jruby/runtime/builtin/IRubyObject;
         6: .line 216
            aload 3 /* x */
            areturn
        end local 3 // org.jruby.runtime.builtin.IRubyObject x
        end local 2 // org.jruby.ext.thread.Queue$Node first
        end local 1 // org.jruby.ext.thread.Queue$Node h
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lorg/jruby/ext/thread/Queue;
            1    7     1      h  Lorg/jruby/ext/thread/Queue$Node;
            2    7     2  first  Lorg/jruby/ext/thread/Queue$Node;
            5    7     3      x  Lorg/jruby/runtime/builtin/IRubyObject;

  protected void fullyLock();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 223
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         1: .line 224
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         2: .line 225
            return
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/jruby/ext/thread/Queue;

  protected void fullyUnlock();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 231
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         1: .line 232
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         2: .line 233
            return
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/jruby/ext/thread/Queue;

  protected void initializedCheck();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 238
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            ifne 1
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.getRuntime:()Lorg/jruby/Ruby;
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            aload 0 /* this */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " not initialized"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newTypeError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         1: .line 239
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/jruby/ext/thread/Queue;

  public void <init>(org.jruby.Ruby, org.jruby.RubyClass);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/RubyClass;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.Ruby runtime
        start local 2 // org.jruby.RubyClass type
         0: .line 242
            aload 0 /* this */
            aload 1 /* runtime */
            aload 2 /* type */
            invokespecial org.jruby.RubyObject.<init>:(Lorg/jruby/Ruby;Lorg/jruby/RubyClass;)V
         1: .line 143
            aload 0 /* this */
            iconst_0
            putfield org.jruby.ext.thread.Queue.closed:Z
         2: .line 152
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicInteger
            dup
            invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:()V
            putfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
         3: .line 167
            aload 0 /* this */
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            putfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
         4: .line 170
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.newCondition:()Ljava/util/concurrent/locks/Condition;
            putfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
         5: .line 173
            aload 0 /* this */
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            putfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
         6: .line 176
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.newCondition:()Ljava/util/concurrent/locks/Condition;
            putfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
         7: .line 244
            aload 0 /* this */
            aload 0 /* this */
            new org.jruby.ext.thread.Queue$Node
            dup
            aconst_null
            invokespecial org.jruby.ext.thread.Queue$Node.<init>:(Lorg/jruby/runtime/builtin/IRubyObject;)V
            dup_x1
            putfield org.jruby.ext.thread.Queue.head:Lorg/jruby/ext/thread/Queue$Node;
            putfield org.jruby.ext.thread.Queue.last:Lorg/jruby/ext/thread/Queue$Node;
         8: .line 245
            return
        end local 2 // org.jruby.RubyClass type
        end local 1 // org.jruby.Ruby runtime
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/jruby/ext/thread/Queue;
            0    9     1  runtime  Lorg/jruby/Ruby;
            0    9     2     type  Lorg/jruby/RubyClass;
    MethodParameters:
         Name  Flags
      runtime  
      type     

  public static void setup(org.jruby.Ruby);
    descriptor: (Lorg/jruby/Ruby;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=1
        start local 0 // org.jruby.Ruby runtime
         0: .line 248
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getThread:()Lorg/jruby/RubyClass;
            ldc "Queue"
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            new org.jruby.ext.thread.Queue$3
            dup
            invokespecial org.jruby.ext.thread.Queue$3.<init>:()V
            invokevirtual org.jruby.RubyClass.defineClassUnder:(Ljava/lang/String;Lorg/jruby/RubyClass;Lorg/jruby/runtime/ObjectAllocator;)Lorg/jruby/RubyClass;
            astore 1 /* cQueue */
        start local 1 // org.jruby.RubyClass cQueue
         1: .line 254
            aload 1 /* cQueue */
            ldc "initialize_copy"
            invokevirtual org.jruby.RubyClass.undefineMethod:(Ljava/lang/String;)V
         2: .line 255
            aload 1 /* cQueue */
            ldc Lorg/jruby/ext/thread/Queue;
            invokevirtual org.jruby.RubyClass.setReifiedClass:(Ljava/lang/Class;)V
         3: .line 256
            aload 1 /* cQueue */
            ldc Lorg/jruby/ext/thread/Queue;
            invokevirtual org.jruby.RubyClass.defineAnnotatedMethods:(Ljava/lang/Class;)V
         4: .line 257
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            ldc "Queue"
            aload 1 /* cQueue */
            invokevirtual org.jruby.RubyClass.setConstant:(Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         5: .line 259
            aload 1 /* cQueue */
            ldc "ClosedQueueError"
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getStopIteration:()Lorg/jruby/RubyClass;
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getStopIteration:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.RubyClass.getAllocator:()Lorg/jruby/runtime/ObjectAllocator;
            invokevirtual org.jruby.RubyClass.defineClassUnder:(Ljava/lang/String;Lorg/jruby/RubyClass;Lorg/jruby/runtime/ObjectAllocator;)Lorg/jruby/RubyClass;
            astore 2 /* cClosedQueueError */
        start local 2 // org.jruby.RubyClass cClosedQueueError
         6: .line 260
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            ldc "ClosedQueueError"
            aload 2 /* cClosedQueueError */
            invokevirtual org.jruby.RubyClass.setConstant:(Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         7: .line 261
            return
        end local 2 // org.jruby.RubyClass cClosedQueueError
        end local 1 // org.jruby.RubyClass cQueue
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    8     0            runtime  Lorg/jruby/Ruby;
            1    8     1             cQueue  Lorg/jruby/RubyClass;
            6    8     2  cClosedQueueError  Lorg/jruby/RubyClass;
    MethodParameters:
         Name  Flags
      runtime  

  public org.jruby.runtime.builtin.IRubyObject initialize(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 265
            aload 0 /* this */
            ldc 2147483647
            putfield org.jruby.ext.thread.Queue.capacity:I
         1: .line 266
            aload 0 /* this */
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/jruby/ext/thread/Queue;
            0    2     1  context  Lorg/jruby/runtime/ThreadContext;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(visibility = org.jruby.runtime.Visibility.PRIVATE:Lorg/jruby/runtime/Visibility;)
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.runtime.builtin.IRubyObject clear(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 275
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 277
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.clearInternal:()V
         2: .line 278
            goto 5
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         3: pop
         4: .line 279
            aload 0 /* this */
            aload 1 /* context */
            ldc "clear"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         5: .line 282
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/jruby/ext/thread/Queue;
            0    6     1  context  Lorg/jruby/runtime/ThreadContext;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod()
    MethodParameters:
         Name  Flags
      context  

  protected void clearInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=7, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 286
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 1 /* putLock */
        start local 1 // java.util.concurrent.locks.ReentrantLock putLock
         1: .line 287
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 2 /* takeLock */
        start local 2 // java.util.concurrent.locks.ReentrantLock takeLock
         2: .line 289
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         3: .line 291
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         4: .line 293
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.head:Lorg/jruby/ext/thread/Queue$Node;
            astore 4 /* h */
        start local 4 // org.jruby.ext.thread.Queue$Node h
         5: goto 9
        start local 3 // org.jruby.ext.thread.Queue$Node p
         6: .line 294
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock org.jruby.ext.thread.Queue$Node org.jruby.ext.thread.Queue$Node
      StackMap stack:
            aload 4 /* h */
            aload 4 /* h */
            putfield org.jruby.ext.thread.Queue$Node.next:Lorg/jruby/ext/thread/Queue$Node;
         7: .line 295
            aload 3 /* p */
            aconst_null
            putfield org.jruby.ext.thread.Queue$Node.item:Lorg/jruby/runtime/builtin/IRubyObject;
         8: .line 293
            aload 3 /* p */
            astore 4 /* h */
        end local 3 // org.jruby.ext.thread.Queue$Node p
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock top org.jruby.ext.thread.Queue$Node
      StackMap stack:
         9: aload 4 /* h */
            getfield org.jruby.ext.thread.Queue$Node.next:Lorg/jruby/ext/thread/Queue$Node;
            dup
            astore 3 /* p */
        start local 3 // org.jruby.ext.thread.Queue$Node p
        10: ifnonnull 6
        end local 4 // org.jruby.ext.thread.Queue$Node h
        end local 3 // org.jruby.ext.thread.Queue$Node p
        11: .line 297
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.last:Lorg/jruby/ext/thread/Queue$Node;
            putfield org.jruby.ext.thread.Queue.head:Lorg/jruby/ext/thread/Queue$Node;
        12: .line 299
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            iconst_0
            invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndSet:(I)I
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmpne 18
        13: .line 300
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        14: .line 301
            goto 18
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Throwable
        15: astore 5
        16: .line 302
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        17: .line 303
            aload 5
            athrow
        18: .line 302
      StackMap locals:
      StackMap stack:
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        19: .line 304
            goto 23
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: astore 6
        21: .line 305
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        22: .line 306
            aload 6
            athrow
        23: .line 305
      StackMap locals:
      StackMap stack:
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        24: .line 307
            return
        end local 2 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 1 // java.util.concurrent.locks.ReentrantLock putLock
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   25     0      this  Lorg/jruby/ext/thread/Queue;
            1   25     1   putLock  Ljava/util/concurrent/locks/ReentrantLock;
            2   25     2  takeLock  Ljava/util/concurrent/locks/ReentrantLock;
            6    9     3         p  Lorg/jruby/ext/thread/Queue$Node;
           10   11     3         p  Lorg/jruby/ext/thread/Queue$Node;
            5   11     4         h  Lorg/jruby/ext/thread/Queue$Node;
      Exception table:
        from    to  target  type
           4    15      15  any
           3    20      20  any
    Exceptions:
      throws java.lang.InterruptedException

  public org.jruby.RubyBoolean empty_p(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/RubyBoolean;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 311
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 312
            aload 1 /* context */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifne 2
            iconst_1
            goto 3
      StackMap locals:
      StackMap stack: org.jruby.runtime.ThreadContext
         2: iconst_0
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext
      StackMap stack: org.jruby.runtime.ThreadContext int
         3: invokestatic org.jruby.RubyBoolean.newBoolean:(Lorg/jruby/runtime/ThreadContext;Z)Lorg/jruby/RubyBoolean;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/jruby/ext/thread/Queue;
            0    4     1  context  Lorg/jruby/runtime/ThreadContext;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"empty?"})
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.RubyNumeric length(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/RubyNumeric;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 317
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 318
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.jruby.RubyNumeric.int2fix:(Lorg/jruby/Ruby;J)Lorg/jruby/RubyNumeric;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/jruby/ext/thread/Queue;
            0    2     1  context  Lorg/jruby/runtime/ThreadContext;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"length", "size"})
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.RubyNumeric num_waiting(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/RubyNumeric;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 323
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 324
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 2 /* takeLock */
        start local 2 // java.util.concurrent.locks.ReentrantLock takeLock
         2: .line 326
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         3: .line 328
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            aload 2 /* takeLock */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokevirtual java.util.concurrent.locks.ReentrantLock.getWaitQueueLength:(Ljava/util/concurrent/locks/Condition;)I
            invokevirtual org.jruby.Ruby.newFixnum:(I)Lorg/jruby/RubyFixnum;
            astore 4
         4: .line 330
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         5: .line 328
            aload 4
            areturn
         6: .line 329
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Throwable
            astore 3
         7: .line 330
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         8: .line 331
            aload 3
            athrow
         9: .line 332
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        10: .line 333
            aload 0 /* this */
            aload 1 /* context */
            ldc "num_waiting"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 2 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Lorg/jruby/ext/thread/Queue;
            0   11     1   context  Lorg/jruby/runtime/ThreadContext;
            2   11     2  takeLock  Ljava/util/concurrent/locks/ReentrantLock;
      Exception table:
        from    to  target  type
           3     4       6  any
           2     5       9  Class java.lang.InterruptedException
           6     9       9  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod()
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.runtime.builtin.IRubyObject pop(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 339
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 341
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getThread:()Lorg/jruby/RubyThread;
            aload 1 /* context */
            aload 0 /* this */
            getstatic org.jruby.ext.thread.Queue.BLOCKING_POP_TASK:Lorg/jruby/RubyThread$Task;
            invokevirtual org.jruby.RubyThread.executeTask:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/Object;Lorg/jruby/RubyThread$Task;)Ljava/lang/Object;
            checkcast org.jruby.runtime.builtin.IRubyObject
         2: areturn
         3: .line 342
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
         4: .line 344
            aload 0 /* this */
            aload 1 /* context */
            ldc "pop"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lorg/jruby/ext/thread/Queue;
            0    5     1  context  Lorg/jruby/runtime/ThreadContext;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"pop", "deq", "shift"})
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.runtime.builtin.IRubyObject pop(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.runtime.builtin.IRubyObject arg0
         0: .line 350
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 352
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getThread:()Lorg/jruby/RubyThread;
            aload 1 /* context */
            aload 0 /* this */
            aload 2 /* arg0 */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            ifne 2
            getstatic org.jruby.ext.thread.Queue.BLOCKING_POP_TASK:Lorg/jruby/RubyThread$Task;
            goto 3
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject
      StackMap stack: org.jruby.RubyThread org.jruby.runtime.ThreadContext org.jruby.ext.thread.Queue
         2: getstatic org.jruby.ext.thread.Queue.NONBLOCKING_POP_TASK:Lorg/jruby/RubyThread$Task;
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject
      StackMap stack: org.jruby.RubyThread org.jruby.runtime.ThreadContext org.jruby.ext.thread.Queue org.jruby.RubyThread$Task
         3: invokevirtual org.jruby.RubyThread.executeTask:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/Object;Lorg/jruby/RubyThread$Task;)Ljava/lang/Object;
            checkcast org.jruby.runtime.builtin.IRubyObject
         4: areturn
         5: .line 353
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
         6: .line 354
            aload 0 /* this */
            aload 1 /* context */
            ldc "pop"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 2 // org.jruby.runtime.builtin.IRubyObject arg0
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lorg/jruby/ext/thread/Queue;
            0    7     1  context  Lorg/jruby/runtime/ThreadContext;
            0    7     2     arg0  Lorg/jruby/runtime/builtin/IRubyObject;
      Exception table:
        from    to  target  type
           1     4       5  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"pop", "deq", "shift"})
    MethodParameters:
         Name  Flags
      context  
      arg0     

  public org.jruby.runtime.builtin.IRubyObject push(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.runtime.builtin.IRubyObject value
         0: .line 360
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 362
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* value */
            invokevirtual org.jruby.ext.thread.Queue.putInternal:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)V
         2: .line 363
            goto 5
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         3: pop
         4: .line 364
            aload 0 /* this */
            aload 1 /* context */
            ldc "push"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         5: .line 367
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 2 // org.jruby.runtime.builtin.IRubyObject value
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/jruby/ext/thread/Queue;
            0    6     1  context  Lorg/jruby/runtime/ThreadContext;
            0    6     2    value  Lorg/jruby/runtime/builtin/IRubyObject;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"push", "<<", "enq"})
    MethodParameters:
         Name  Flags
      context  
      value    

  protected void putInternal(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=9, args_size=3
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.runtime.builtin.IRubyObject e
         0: .line 378
            aload 2 /* e */
            ifnonnull 1
            new java.lang.NullPointerException
            dup
            invokespecial java.lang.NullPointerException.<init>:()V
            athrow
         1: .line 381
      StackMap locals:
      StackMap stack:
            iconst_m1
            istore 3 /* c */
        start local 3 // int c
         2: .line 382
            new org.jruby.ext.thread.Queue$Node
            dup
            aload 2 /* e */
            invokespecial org.jruby.ext.thread.Queue$Node.<init>:(Lorg/jruby/runtime/builtin/IRubyObject;)V
            astore 4 /* node */
        start local 4 // org.jruby.ext.thread.Queue$Node node
         3: .line 383
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 5 /* putLock */
        start local 5 // java.util.concurrent.locks.ReentrantLock putLock
         4: .line 384
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            astore 6 /* count */
        start local 6 // java.util.concurrent.atomic.AtomicInteger count
         5: .line 385
            aload 5 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         6: .line 403
            goto 8
        start local 7 // boolean isClosed
         7: .line 404
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject int org.jruby.ext.thread.Queue$Node java.util.concurrent.locks.ReentrantLock java.util.concurrent.atomic.AtomicInteger int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.await:()V
        end local 7 // boolean isClosed
         8: .line 403
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.closed:Z
            dup
            istore 7 /* isClosed */
        start local 7 // boolean isClosed
         9: ifne 10
            aload 6 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmpge 7
        10: .line 407
      StackMap locals: int
      StackMap stack:
            iload 7 /* isClosed */
            ifeq 13
        11: .line 409
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        12: .line 415
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.ext.thread.Queue.raiseClosedError:(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
        13: .line 418
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* node */
            invokevirtual org.jruby.ext.thread.Queue.enqueue:(Lorg/jruby/ext/thread/Queue$Node;)V
        14: .line 419
            aload 6 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndIncrement:()I
            istore 3 /* c */
        15: .line 421
            iload 3 /* c */
            iconst_1
            iadd
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmpge 21
        16: .line 422
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        end local 7 // boolean isClosed
        17: .line 423
            goto 21
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject int org.jruby.ext.thread.Queue$Node java.util.concurrent.locks.ReentrantLock java.util.concurrent.atomic.AtomicInteger
      StackMap stack: java.lang.Throwable
        18: astore 8
        19: .line 424
            aload 5 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        20: .line 425
            aload 8
            athrow
        21: .line 424
      StackMap locals:
      StackMap stack:
            aload 5 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        22: .line 427
            iload 3 /* c */
            ifne 24
        23: .line 428
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.signalNotEmpty:()V
        24: .line 429
      StackMap locals:
      StackMap stack:
            return
        end local 6 // java.util.concurrent.atomic.AtomicInteger count
        end local 5 // java.util.concurrent.locks.ReentrantLock putLock
        end local 4 // org.jruby.ext.thread.Queue$Node node
        end local 3 // int c
        end local 2 // org.jruby.runtime.builtin.IRubyObject e
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   25     0      this  Lorg/jruby/ext/thread/Queue;
            0   25     1   context  Lorg/jruby/runtime/ThreadContext;
            0   25     2         e  Lorg/jruby/runtime/builtin/IRubyObject;
            2   25     3         c  I
            3   25     4      node  Lorg/jruby/ext/thread/Queue$Node;
            4   25     5   putLock  Ljava/util/concurrent/locks/ReentrantLock;
            5   25     6     count  Ljava/util/concurrent/atomic/AtomicInteger;
            7    8     7  isClosed  Z
            9   17     7  isClosed  Z
      Exception table:
        from    to  target  type
           6    18      18  any
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
      e        

  public org.jruby.runtime.builtin.IRubyObject marshal_dump(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 433
            aload 1 /* context */
            aload 0 /* this */
            invokestatic org.jruby.RubyMarshal.undumpable:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/RubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/jruby/ext/thread/Queue;
            0    1     1  context  Lorg/jruby/runtime/ThreadContext;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod()
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.runtime.builtin.IRubyObject close(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 438
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 440
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.closeInternal:()V
         2: .line 441
            goto 5
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         3: pop
         4: .line 442
            aload 0 /* this */
            aload 1 /* context */
            ldc "close"
            invokevirtual org.jruby.ext.thread.Queue.createInterruptedError:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         5: .line 445
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/jruby/ext/thread/Queue;
            0    6     1  context  Lorg/jruby/runtime/ThreadContext;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod()
    MethodParameters:
         Name  Flags
      context  

  protected void closeInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=7, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 449
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.putLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 1 /* putLock */
        start local 1 // java.util.concurrent.locks.ReentrantLock putLock
         1: .line 450
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 2 /* takeLock */
        start local 2 // java.util.concurrent.locks.ReentrantLock takeLock
         2: .line 451
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            astore 3 /* count */
        start local 3 // java.util.concurrent.atomic.AtomicInteger count
         3: .line 453
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         4: .line 455
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         5: .line 457
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.closed:Z
            ifeq 9
         6: .line 474
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         7: .line 477
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         8: .line 458
            return
         9: .line 461
      StackMap locals: java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock java.util.concurrent.atomic.AtomicInteger
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield org.jruby.ext.thread.Queue.closed:Z
        10: .line 463
            aload 3 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            istore 4 /* c */
        start local 4 // int c
        11: .line 465
            iload 4 /* c */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmplt 14
        12: .line 468
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notFull:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        13: .line 469
            goto 20
      StackMap locals: int
      StackMap stack:
        14: iload 4 /* c */
            ifne 20
        15: .line 471
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        16: .line 473
            goto 20
        end local 4 // int c
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock java.util.concurrent.atomic.AtomicInteger
      StackMap stack: java.lang.Throwable
        17: astore 5
        18: .line 474
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        19: .line 475
            aload 5
            athrow
        start local 4 // int c
        20: .line 474
      StackMap locals: int
      StackMap stack:
            aload 2 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        21: .line 476
            goto 25
        end local 4 // int c
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.locks.ReentrantLock java.util.concurrent.locks.ReentrantLock java.util.concurrent.atomic.AtomicInteger
      StackMap stack: java.lang.Throwable
        22: astore 6
        23: .line 477
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        24: .line 478
            aload 6
            athrow
        start local 4 // int c
        25: .line 477
      StackMap locals: int
      StackMap stack:
            aload 1 /* putLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        26: .line 479
            return
        end local 4 // int c
        end local 3 // java.util.concurrent.atomic.AtomicInteger count
        end local 2 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 1 // java.util.concurrent.locks.ReentrantLock putLock
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   27     0      this  Lorg/jruby/ext/thread/Queue;
            1   27     1   putLock  Ljava/util/concurrent/locks/ReentrantLock;
            2   27     2  takeLock  Ljava/util/concurrent/locks/ReentrantLock;
            3   27     3     count  Ljava/util/concurrent/atomic/AtomicInteger;
           11   17     4         c  I
           20   22     4         c  I
           25   27     4         c  I
      Exception table:
        from    to  target  type
           5     6      17  any
           9    17      17  any
           4     7      22  any
           9    22      22  any
    Exceptions:
      throws java.lang.InterruptedException

  public org.jruby.runtime.builtin.IRubyObject closed_p(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 483
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.initializedCheck:()V
         1: .line 484
            aload 1 /* context */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.closed:Z
            invokestatic org.jruby.RubyBoolean.newBoolean:(Lorg/jruby/runtime/ThreadContext;Z)Lorg/jruby/RubyBoolean;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/jruby/ext/thread/Queue;
            0    2     1  context  Lorg/jruby/runtime/ThreadContext;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"closed?"})
    MethodParameters:
         Name  Flags
      context  

  public synchronized void shutdown();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 488
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.closeInternal:()V
         1: .line 489
            return
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/jruby/ext/thread/Queue;
    Exceptions:
      throws java.lang.InterruptedException

  public boolean isShutdown();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 492
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.closed:Z
            ireturn
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ext/thread/Queue;

  public synchronized void checkShutdown();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 496
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.isShutdown:()Z
            ifeq 3
         1: .line 497
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.getRuntime:()Lorg/jruby/Ruby;
            astore 1 /* runtime */
        start local 1 // org.jruby.Ruby runtime
         2: .line 498
            aload 1 /* runtime */
            aload 1 /* runtime */
            invokevirtual org.jruby.Ruby.getThreadError:()Lorg/jruby/RubyClass;
            ldc "queue shut down"
            invokestatic org.jruby.exceptions.RaiseException.from:(Lorg/jruby/Ruby;Lorg/jruby/RubyClass;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 1 // org.jruby.Ruby runtime
         3: .line 500
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/jruby/ext/thread/Queue;
            2    3     1  runtime  Lorg/jruby/Ruby;

  protected long java_length();
    descriptor: ()J
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 503
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            lreturn
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ext/thread/Queue;

  protected org.jruby.runtime.builtin.IRubyObject takeInternal(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=10, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 508
            iconst_m1
            istore 3 /* c */
        start local 3 // int c
         1: .line 509
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            astore 4 /* count */
        start local 4 // java.util.concurrent.atomic.AtomicInteger count
         2: .line 510
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 5 /* takeLock */
        start local 5 // java.util.concurrent.locks.ReentrantLock takeLock
         3: .line 512
            iconst_0
            istore 7 /* notFullSignalNeeded */
        start local 7 // boolean notFullSignalNeeded
         4: .line 514
            aload 5 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         5: .line 517
            goto 7
        start local 6 // boolean isClosed
         6: .line 518
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext top int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock int int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.await:()V
        end local 6 // boolean isClosed
         7: .line 517
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext top int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock top int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.closed:Z
            dup
            istore 6 /* isClosed */
        start local 6 // boolean isClosed
         8: ifne 9
            aload 4 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifeq 6
         9: .line 523
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext top int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock int int
      StackMap stack:
            iload 6 /* isClosed */
            ifeq 10
            aload 4 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifne 10
            iconst_0
            goto 11
      StackMap locals:
      StackMap stack:
        10: iconst_1
      StackMap locals:
      StackMap stack: int
        11: istore 8 /* canDequeue */
        start local 8 // boolean canDequeue
        12: .line 524
            iload 8 /* canDequeue */
            ifeq 16
        13: .line 525
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.dequeue:()Lorg/jruby/runtime/builtin/IRubyObject;
            astore 2 /* x */
        start local 2 // org.jruby.runtime.builtin.IRubyObject x
        14: .line 526
            aload 4 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndDecrement:()I
            istore 3 /* c */
        15: .line 527
            goto 17
        end local 2 // org.jruby.runtime.builtin.IRubyObject x
        16: .line 528
      StackMap locals: int
      StackMap stack:
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.nil:Lorg/jruby/runtime/builtin/IRubyObject;
            astore 2 /* x */
        start local 2 // org.jruby.runtime.builtin.IRubyObject x
        17: .line 533
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock int int int
      StackMap stack:
            iload 3 /* c */
            iconst_1
            if_icmpgt 18
            iload 6 /* isClosed */
            ifeq 19
        18: .line 534
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        19: .line 536
      StackMap locals:
      StackMap stack:
            iload 8 /* canDequeue */
            ifeq 27
        20: .line 540
            iload 3 /* c */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmpne 21
            iconst_1
            goto 22
      StackMap locals:
      StackMap stack:
        21: iconst_0
      StackMap locals:
      StackMap stack: int
        22: istore 7 /* notFullSignalNeeded */
        end local 8 // boolean canDequeue
        23: .line 542
            goto 27
        end local 6 // boolean isClosed
        end local 2 // org.jruby.runtime.builtin.IRubyObject x
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext top int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock top int
      StackMap stack: java.lang.Throwable
        24: astore 9
        25: .line 543
            aload 5 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        26: .line 544
            aload 9
            athrow
        start local 2 // org.jruby.runtime.builtin.IRubyObject x
        start local 6 // boolean isClosed
        27: .line 543
      StackMap locals: org.jruby.ext.thread.Queue org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.locks.ReentrantLock int int
      StackMap stack:
            aload 5 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        28: .line 546
            iload 7 /* notFullSignalNeeded */
            ifeq 30
        29: .line 547
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.signalNotFull:()V
        30: .line 549
      StackMap locals:
      StackMap stack:
            aload 2 /* x */
            areturn
        end local 7 // boolean notFullSignalNeeded
        end local 6 // boolean isClosed
        end local 5 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 4 // java.util.concurrent.atomic.AtomicInteger count
        end local 3 // int c
        end local 2 // org.jruby.runtime.builtin.IRubyObject x
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   31     0                 this  Lorg/jruby/ext/thread/Queue;
            0   31     1              context  Lorg/jruby/runtime/ThreadContext;
           14   16     2                    x  Lorg/jruby/runtime/builtin/IRubyObject;
           17   24     2                    x  Lorg/jruby/runtime/builtin/IRubyObject;
           27   31     2                    x  Lorg/jruby/runtime/builtin/IRubyObject;
            1   31     3                    c  I
            2   31     4                count  Ljava/util/concurrent/atomic/AtomicInteger;
            3   31     5             takeLock  Ljava/util/concurrent/locks/ReentrantLock;
            6    7     6             isClosed  Z
            8   24     6             isClosed  Z
           27   31     6             isClosed  Z
            4   31     7  notFullSignalNeeded  Z
           12   23     8           canDequeue  Z
      Exception table:
        from    to  target  type
           5    24      24  any
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  

  public org.jruby.runtime.builtin.IRubyObject pollInternal();
    descriptor: ()Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=7, args_size=1
        start local 0 // org.jruby.ext.thread.Queue this
         0: .line 553
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.count:Ljava/util/concurrent/atomic/AtomicInteger;
            astore 1 /* count */
        start local 1 // java.util.concurrent.atomic.AtomicInteger count
         1: .line 554
            aload 1 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifne 3
         2: .line 555
            aconst_null
            areturn
         3: .line 556
      StackMap locals: java.util.concurrent.atomic.AtomicInteger
      StackMap stack:
            aconst_null
            astore 2 /* x */
        start local 2 // org.jruby.runtime.builtin.IRubyObject x
         4: .line 557
            iconst_0
            istore 3 /* notFullSignalNeeded */
        start local 3 // boolean notFullSignalNeeded
         5: .line 558
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.takeLock:Ljava/util/concurrent/locks/ReentrantLock;
            astore 4 /* takeLock */
        start local 4 // java.util.concurrent.locks.ReentrantLock takeLock
         6: .line 559
            aload 4 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lockInterruptibly:()V
         7: .line 561
            aload 1 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifle 19
         8: .line 562
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.dequeue:()Lorg/jruby/runtime/builtin/IRubyObject;
            astore 2 /* x */
         9: .line 563
            aload 1 /* count */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndDecrement:()I
            istore 5 /* c */
        start local 5 // int c
        10: .line 564
            iload 5 /* c */
            iconst_1
            if_icmple 12
        11: .line 565
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.notEmpty:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
        12: .line 570
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.atomic.AtomicInteger org.jruby.runtime.builtin.IRubyObject int java.util.concurrent.locks.ReentrantLock int
      StackMap stack:
            iload 5 /* c */
            aload 0 /* this */
            getfield org.jruby.ext.thread.Queue.capacity:I
            if_icmpne 13
            iconst_1
            goto 14
      StackMap locals:
      StackMap stack:
        13: iconst_0
      StackMap locals:
      StackMap stack: int
        14: istore 3 /* notFullSignalNeeded */
        end local 5 // int c
        15: .line 572
            goto 19
      StackMap locals: org.jruby.ext.thread.Queue java.util.concurrent.atomic.AtomicInteger org.jruby.runtime.builtin.IRubyObject int java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Throwable
        16: astore 6
        17: .line 573
            aload 4 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        18: .line 574
            aload 6
            athrow
        19: .line 573
      StackMap locals:
      StackMap stack:
            aload 4 /* takeLock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        20: .line 575
            iload 3 /* notFullSignalNeeded */
            ifeq 22
        21: .line 576
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.signalNotFull:()V
        22: .line 577
      StackMap locals:
      StackMap stack:
            aload 2 /* x */
            areturn
        end local 4 // java.util.concurrent.locks.ReentrantLock takeLock
        end local 3 // boolean notFullSignalNeeded
        end local 2 // org.jruby.runtime.builtin.IRubyObject x
        end local 1 // java.util.concurrent.atomic.AtomicInteger count
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   23     0                 this  Lorg/jruby/ext/thread/Queue;
            1   23     1                count  Ljava/util/concurrent/atomic/AtomicInteger;
            4   23     2                    x  Lorg/jruby/runtime/builtin/IRubyObject;
            5   23     3  notFullSignalNeeded  Z
            6   23     4             takeLock  Ljava/util/concurrent/locks/ReentrantLock;
           10   15     5                    c  I
      Exception table:
        from    to  target  type
           7    16      16  any
    Exceptions:
      throws java.lang.InterruptedException

  public org.jruby.runtime.builtin.IRubyObject raiseClosedError(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 605
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            ldc "ClosedQueueError"
            invokevirtual org.jruby.Ruby.getClass:(Ljava/lang/String;)Lorg/jruby/RubyClass;
            ldc "queue closed"
            invokevirtual org.jruby.Ruby.newRaiseException:(Lorg/jruby/RubyClass;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/jruby/ext/thread/Queue;
            0    1     1  context  Lorg/jruby/runtime/ThreadContext;
    MethodParameters:
         Name  Flags
      context  

  protected org.jruby.exceptions.RaiseException createInterruptedError(org.jruby.runtime.ThreadContext, java.lang.String);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.ext.thread.Queue this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // java.lang.String methodName
         0: .line 609
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            new java.lang.StringBuilder
            dup
            ldc "interrupted in "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual org.jruby.ext.thread.Queue.getMetaClass:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.RubyClass.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "#"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* methodName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newThreadError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            areturn
        end local 2 // java.lang.String methodName
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.ext.thread.Queue this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/jruby/ext/thread/Queue;
            0    1     1     context  Lorg/jruby/runtime/ThreadContext;
            0    1     2  methodName  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      context     
      methodName  
}
SourceFile: "Queue.java"
NestMembers:
  org.jruby.ext.thread.Queue$1  org.jruby.ext.thread.Queue$2  org.jruby.ext.thread.Queue$3  org.jruby.ext.thread.Queue$Node
InnerClasses:
  public abstract Task = org.jruby.RubyThread$Task of org.jruby.RubyThread
  org.jruby.ext.thread.Queue$1
  org.jruby.ext.thread.Queue$2
  org.jruby.ext.thread.Queue$3
  Node = org.jruby.ext.thread.Queue$Node of org.jruby.ext.thread.Queue
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyClass(name = {"Queue"})