// File: /workspace/github_c_makefile_star2_O3/wahern[P]cqueues/src/thread.c
// Function: ct_release
static void ct_release(struct cthread *ct) {
	_Bool destroy;
	struct cthread_lib *ent, *nxt;

	pthread_mutex_lock(&ct->mutex);
	destroy = !--ct->refs;
	pthread_mutex_unlock(&ct->mutex);

	if (!destroy)
		return;

	hdl_destroy(&ct->handle);

	pthread_attr_destroy(&ct->attr);
	pthread_cond_destroy(&ct->cond);
	pthread_mutex_destroy(&ct->mutex);

	cqs_closefd(&ct->pipe[0]);
	cqs_closefd(&ct->pipe[1]);

	for (ent = LLRB_MIN(libs, &ct->libs); ent; ent = nxt) {
		nxt = LLRB_NEXT(libs, &ct->libs, ent);
		LLRB_REMOVE(libs, &ct->libs, ent);
		dlclose(ent->ref);
		free(ent);
	}

	cqs_closefd(&ct->tmp.fd[0]);
	cqs_closefd(&ct->tmp.fd[1]);

	free(ct->tmp.arg);

	free(ct->msg);
	free(ct);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
leaq 0x20(%rdi), %r14
movq %r14, %rdi
callq 0x103b0
decl (%rbx)
setne %bpl
movq %r14, %rdi
callq 0xf9b0
testb %bpl, %bpl
je 0x1ccfc
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x180(%rbx), %rdi
callq 0xfef0
leaq 0x78(%rbx), %rdi
callq 0x106c0
leaq 0x48(%rbx), %rdi
callq 0x109b0
movq %r14, %rdi
callq 0xfef0
movl 0x1a8(%rbx), %edi
cmpl $-0x1, %edi
je 0x1cd3c
callq 0x10a10
movl $0xffffffff, 0x1a8(%rbx) # imm = 0xFFFFFFFF
movl 0x1ac(%rbx), %edi
cmpl $-0x1, %edi
je 0x1cd56
callq 0x10a10
movl $0xffffffff, 0x1ac(%rbx) # imm = 0xFFFFFFFF
leaq 0x1b0(%rbx), %r15
movq 0x1b0(%rbx), %rax
testq %rax, %rax
je 0x1d3be
movq %rax, %r12
movq 0x28(%rax), %rax
testq %rax, %rax
jne 0x1cd64
movq %r12, %r14
movq 0x30(%r12), %rax
testq %rax, %rax
je 0x1cd94
movq %rax, %r12
movq 0x28(%rax), %rax
testq %rax, %rax
jne 0x1cd86
jmp 0x1cdbf
movq 0x38(%r14), %r12
testq %r12, %r12
je 0x1cdbc
cmpq %r14, 0x28(%r12)
je 0x1cdbf
movq %r14, %rax
movq 0x38(%rax), %r12
testq %r12, %r12
je 0x1cdbc
cmpq 0x30(%r12), %rax
movq %r12, %rax
je 0x1cda7
jmp 0x1cdbf
xorl %r12d, %r12d
movq (%r15), %rdx
testq %rdx, %rdx
je 0x1d3a4
movq %r15, %rcx
movq 0x28(%rdx), %rsi
movq 0x38(%rdx), %rax
movq 0x8(%r14), %rdi
cmpq 0x8(%rdx), %rdi
setg %r9b
jge 0x1ceb6
testq %rsi, %rsi
je 0x1cead
cmpb $0x0, 0x40(%rsi)
jne 0x1cead
movq 0x28(%rsi), %rdi
testq %rdi, %rdi
je 0x1ce0e
cmpb $0x0, 0x40(%rdi)
jne 0x1cead
xorb $0x1, 0x40(%rdx)
xorb $0x1, 0x40(%rsi)
movq 0x30(%rdx), %rsi
movb 0x40(%rsi), %r8b
xorb $0x1, %r8b
movb %r8b, 0x40(%rsi)
movq 0x28(%rsi), %rdi
testq %rdi, %rdi
je 0x1cead
cmpb $0x1, 0x40(%rdi)
jne 0x1cead
movq 0x30(%rdi), %r9
movq %r9, 0x28(%rsi)
testq %r9, %r9
je 0x1ce46
movq %rsi, 0x38(%r9)
movq %rsi, 0x30(%rdi)
movb %r8b, 0x40(%rdi)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %r8
movq %r8, 0x38(%rdi)
movq %rdi, 0x38(%rsi)
movq %rdi, 0x30(%rdx)
movq (%rcx), %rsi
movq 0x30(%rsi), %rdx
movq 0x28(%rdx), %rdi
movq %rdi, 0x30(%rsi)
testq %rdi, %rdi
je 0x1ce7a
movq %rsi, 0x38(%rdi)
movq %rsi, 0x28(%rdx)
movb 0x40(%rsi), %dil
movb %dil, 0x40(%rdx)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %rdi
movq %rdi, 0x38(%rdx)
movq %rdx, 0x38(%rsi)
movq %rdx, (%rcx)
xorb $0x1, 0x40(%rdx)
movq 0x28(%rdx), %rcx
xorb $0x1, 0x40(%rcx)
movq 0x30(%rdx), %rcx
xorb $0x1, 0x40(%rcx)
addq $0x28, %rdx
jmp 0x1cf55
testq %rsi, %rsi
je 0x1cf0a
cmpb $0x1, 0x40(%rsi)
jne 0x1cf0a
movq 0x30(%rsi), %r8
movq %r8, 0x28(%rdx)
movq %rax, %rdi
testq %r8, %r8
je 0x1ced9
movq %rdx, 0x38(%r8)
movq 0x38(%rdx), %rdi
movq %rdx, 0x30(%rsi)
movb 0x40(%rdx), %r8b
movb %r8b, 0x40(%rsi)
movb $0x1, 0x40(%rdx)
movq %rdi, 0x38(%rsi)
movq %rsi, 0x38(%rdx)
movq %rsi, (%rcx)
movq 0x8(%r14), %rdi
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
cmpq 0x8(%rsi), %rdi
setg %r9b
jge 0x1cf0d
jmp 0x1cf26
movq %rdx, %rsi
movl $0x1, %r8d
testb %r9b, %r9b
jne 0x1cf26
xorl %r8d, %r8d
cmpq $0x0, 0x30(%rsi)
je 0x1d21d
movq 0x30(%rsi), %r9
testq %r9, %r9
je 0x1cf45
cmpb $0x0, 0x40(%r9)
jne 0x1cf45
movq 0x28(%r9), %rdx
testq %rdx, %rdx
je 0x1cf69
cmpb $0x0, 0x40(%rdx)
je 0x1cf69
movq %rsi, %rdx
testl %r8d, %r8d
je 0x1cff0
addq $0x30, %rdx
movq %rdx, %rcx
movq (%rdx), %rdx
testq %rdx, %rdx
jne 0x1cdce
jmp 0x1d26d
xorb $0x1, 0x40(%rsi)
movq 0x28(%rsi), %rdx
xorb $0x1, 0x40(%rdx)
xorb $0x1, 0x40(%r9)
movq 0x28(%rdx), %r8
testq %r8, %r8
je 0x1cfd4
cmpb $0x1, 0x40(%r8)
jne 0x1cfd4
movq 0x30(%rdx), %rdi
movq %rdi, 0x28(%rsi)
testq %rdi, %rdi
je 0x1cf9b
movq %rsi, 0x38(%rdi)
movq %rsi, 0x30(%rdx)
movb 0x40(%rsi), %dil
movb %dil, 0x40(%rdx)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %rdi
movq %rdi, 0x38(%rdx)
movq %rdx, 0x38(%rsi)
movq %rdx, (%rcx)
xorb $0x1, 0x40(%rdx)
movq 0x28(%rdx), %rsi
xorb $0x1, 0x40(%rsi)
movq 0x30(%rdx), %rsi
xorb $0x1, 0x40(%rsi)
movq 0x8(%r14), %rdi
jmp 0x1cfd7
movq %rsi, %rdx
xorl %r8d, %r8d
cmpq 0x8(%rdx), %rdi
setg %sil
jl 0x1cf51
movb %sil, %r8b
jmp 0x1cf48
movq 0x30(%rdx), %rax
addq $0x30, %rdx
movq 0x28(%rax), %rsi
testq %rsi, %rsi
je 0x1d226
movq %rdx, %rdi
cmpb $0x0, 0x40(%rsi)
jne 0x1d0c6
movq 0x28(%rsi), %r8
testq %r8, %r8
je 0x1d026
cmpb $0x0, 0x40(%r8)
jne 0x1d0c6
xorb $0x1, 0x40(%rax)
xorb $0x1, 0x40(%rsi)
movq 0x30(%rax), %rsi
movb 0x40(%rsi), %r9b
xorb $0x1, %r9b
movb %r9b, 0x40(%rsi)
movq 0x28(%rsi), %r8
testq %r8, %r8
je 0x1d0c6
cmpb $0x1, 0x40(%r8)
jne 0x1d0c6
movq 0x30(%r8), %r10
movq %r10, 0x28(%rsi)
testq %r10, %r10
je 0x1d05f
movq %rsi, 0x38(%r10)
movq %rsi, 0x30(%r8)
movb %r9b, 0x40(%r8)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %r9
movq %r9, 0x38(%r8)
movq %r8, 0x38(%rsi)
movq %r8, 0x30(%rax)
movq (%rdi), %rsi
movq 0x30(%rsi), %rax
movq 0x28(%rax), %r8
movq %r8, 0x30(%rsi)
testq %r8, %r8
je 0x1d093
movq %rsi, 0x38(%r8)
movq %rsi, 0x28(%rax)
movb 0x40(%rsi), %r8b
movb %r8b, 0x40(%rax)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %r8
movq %r8, 0x38(%rax)
movq %rax, 0x38(%rsi)
movq %rax, (%rdi)
xorb $0x1, 0x40(%rax)
movq 0x28(%rax), %rsi
xorb $0x1, 0x40(%rsi)
movq 0x30(%rax), %rsi
xorb $0x1, 0x40(%rsi)
movq %rax, %rdi
movq 0x28(%rax), %rax
addq $0x28, %rdi
movq 0x28(%rax), %rsi
testq %rsi, %rsi
jne 0x1d008
movq 0x38(%rax), %rsi
movq $0x0, (%rdi)
cmpq %rdx, %rdi
je 0x1d22d
movq %rsi, %r8
movq (%r15), %r9
movq 0x38(%rsi), %rsi
movq %r15, %rdi
cmpq %r9, %r8
je 0x1d120
leaq 0x28(%rsi), %r9
leaq 0x30(%rsi), %rdi
xorl %r10d, %r10d
cmpq 0x28(%rsi), %r8
setne %r10b
cmoveq %r9, %rdi
movq 0x28(%rsi,%r10,8), %r9
movq 0x30(%r9), %r8
testq %r8, %r8
je 0x1d140
cmpb $0x1, 0x40(%r8)
jne 0x1d140
movq 0x28(%r9), %r10
testq %r10, %r10
je 0x1d145
cmpb $0x0, 0x40(%r10)
je 0x1d145
movq %r9, %r8
jmp 0x1d176
movq 0x28(%r8), %r10
movq %r10, 0x30(%r9)
testq %r10, %r10
je 0x1d156
movq %r9, 0x38(%r10)
movq %r9, 0x28(%r8)
movb 0x40(%r9), %r10b
movb %r10b, 0x40(%r8)
movb $0x1, 0x40(%r9)
movq 0x38(%r9), %r10
movq %r10, 0x38(%r8)
movq %r8, 0x38(%r9)
movq %r8, (%rdi)
movq 0x28(%r8), %r9
testq %r9, %r9
je 0x1d0e9
movb 0x40(%r9), %r10b
cmpb $0x1, %r10b
jne 0x1d1e4
movq 0x28(%r9), %r11
testq %r11, %r11
je 0x1d1e4
cmpb $0x1, 0x40(%r11)
jne 0x1d1e4
movq 0x30(%r9), %r10
movq %r10, 0x28(%r8)
testq %r10, %r10
je 0x1d1ae
movq %r8, 0x38(%r10)
movq %r8, 0x30(%r9)
movb 0x40(%r8), %r10b
movb %r10b, 0x40(%r9)
movb $0x1, 0x40(%r8)
movq 0x38(%r8), %r10
movq %r10, 0x38(%r9)
movq %r9, 0x38(%r8)
movq %r9, (%rdi)
movq 0x28(%r9), %r11
testq %r11, %r11
je 0x1d0e9
movb 0x40(%r11), %r10b
movq %r9, %r8
jmp 0x1d1e7
movq %r9, %r11
testb $0x1, %r10b
je 0x1d0e9
movq 0x30(%r8), %r9
testq %r9, %r9
je 0x1d0e9
cmpb $0x1, 0x40(%r9)
jne 0x1d0e9
xorb $0x1, 0x40(%r8)
xorb $0x1, 0x40(%r11)
xorb $0x1, 0x40(%r9)
jmp 0x1d0e9
movq $0x0, (%rcx)
jmp 0x1d26d
movq $0x0, (%rdx)
movq (%rcx), %rdx
movb 0x40(%rdx), %sil
movb %sil, 0x40(%rax)
movq 0x38(%rdx), %rdx
movq %rdx, 0x38(%rax)
movq (%rcx), %rdx
movq 0x30(%rdx), %rdx
movq %rdx, 0x30(%rax)
testq %rdx, %rdx
je 0x1d254
movq %rax, 0x38(%rdx)
movq (%rcx), %rdx
movq 0x28(%rdx), %rdx
movq %rdx, 0x28(%rax)
testq %rdx, %rdx
je 0x1d268
movq %rax, 0x38(%rdx)
movq %rax, (%rcx)
jmp 0x1d276
testq %rax, %rax
je 0x1d398
movq %rax, %rcx
movq (%r15), %rsi
movq 0x38(%rax), %rax
movq %r15, %rdx
cmpq %rsi, %rcx
je 0x1d2a3
leaq 0x28(%rax), %rsi
leaq 0x30(%rax), %rdx
xorl %edi, %edi
cmpq 0x28(%rax), %rcx
setne %dil
cmoveq %rsi, %rdx
movq 0x28(%rax,%rdi,8), %rsi
movq 0x30(%rsi), %rcx
testq %rcx, %rcx
je 0x1d2c1
cmpb $0x1, 0x40(%rcx)
jne 0x1d2c1
movq 0x28(%rsi), %rdi
testq %rdi, %rdi
je 0x1d2c6
cmpb $0x0, 0x40(%rdi)
je 0x1d2c6
movq %rsi, %rcx
jmp 0x1d2f6
movq 0x28(%rcx), %rdi
movq %rdi, 0x30(%rsi)
testq %rdi, %rdi
je 0x1d2d7
movq %rsi, 0x38(%rdi)
movq %rsi, 0x28(%rcx)
movb 0x40(%rsi), %dil
movb %dil, 0x40(%rcx)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %rdi
movq %rdi, 0x38(%rcx)
movq %rcx, 0x38(%rsi)
movq %rcx, (%rdx)
movq 0x28(%rcx), %rsi
testq %rsi, %rsi
je 0x1d26d
movb 0x40(%rsi), %dil
cmpb $0x1, %dil
jne 0x1d363
movq 0x28(%rsi), %r8
testq %r8, %r8
je 0x1d363
cmpb $0x1, 0x40(%r8)
jne 0x1d363
movq 0x30(%rsi), %rdi
movq %rdi, 0x28(%rcx)
testq %rdi, %rdi
je 0x1d32e
movq %rcx, 0x38(%rdi)
movq %rcx, 0x30(%rsi)
movb 0x40(%rcx), %dil
movb %dil, 0x40(%rsi)
movb $0x1, 0x40(%rcx)
movq 0x38(%rcx), %rdi
movq %rdi, 0x38(%rsi)
movq %rsi, 0x38(%rcx)
movq %rsi, (%rdx)
movq 0x28(%rsi), %rdx
testq %rdx, %rdx
je 0x1d26d
movb 0x40(%rdx), %dil
movq %rsi, %rcx
jmp 0x1d366
movq %rsi, %rdx
testb $0x1, %dil
je 0x1d26d
movq 0x30(%rcx), %rsi
testq %rsi, %rsi
je 0x1d26d
cmpb $0x1, 0x40(%rsi)
jne 0x1d26d
xorb $0x1, 0x40(%rcx)
xorb $0x1, 0x40(%rdx)
xorb $0x1, 0x40(%rsi)
jmp 0x1d26d
movq (%r15), %rax
testq %rax, %rax
je 0x1d3a4
movb $0x0, 0x40(%rax)
movq 0x20(%r14), %rdi
callq 0xfa20
movq %r14, %rdi
callq 0xff30
testq %r12, %r12
jne 0x1cd79
movl 0x1c4(%rbx), %edi
cmpl $-0x1, %edi
je 0x1d3d8
callq 0x10a10
movl $0xffffffff, 0x1c4(%rbx) # imm = 0xFFFFFFFF
movl 0x1c8(%rbx), %edi
cmpl $-0x1, %edi
je 0x1d3f2
callq 0x10a10
movl $0xffffffff, 0x1c8(%rbx) # imm = 0xFFFFFFFF
movq 0x1b8(%rbx), %rdi
callq 0xff30
movq 0x10(%rbx), %rdi
callq 0xff30
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xff30