// File: /workspace/github_c_makefile_star2_O1/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 0x1ce67
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 0x1cea7
callq 0x10a10
movl $0xffffffff, 0x1a8(%rbx) # imm = 0xFFFFFFFF
movl 0x1ac(%rbx), %edi
cmpl $-0x1, %edi
je 0x1cec1
callq 0x10a10
movl $0xffffffff, 0x1ac(%rbx) # imm = 0xFFFFFFFF
leaq 0x1b0(%rbx), %r15
movq 0x1b0(%rbx), %rax
testq %rax, %rax
je 0x1d4d7
movq %rax, %r14
movq 0x28(%rax), %rax
testq %rax, %rax
jne 0x1cecf
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq 0x30(%r14), %rax
testq %rax, %rax
je 0x1d120
movq %rax, %r12
movq 0x28(%rax), %rax
testq %rax, %rax
jne 0x1cef6
movq (%r15), %rsi
testq %rsi, %rsi
je 0x1d157
movq %r15, %rax
movq 0x28(%rsi), %rdx
movq 0x38(%rsi), %rcx
movq 0x8(%r14), %r8
xorl %edi, %edi
cmpq 0x8(%rsi), %r8
setg %dil
cmovll %ebp, %edi
jge 0x1d001
testq %rdx, %rdx
je 0x1cff5
cmpb $0x0, 0x40(%rdx)
jne 0x1cff5
movq 0x28(%rdx), %rdi
testq %rdi, %rdi
je 0x1cf56
cmpb $0x0, 0x40(%rdi)
jne 0x1cff5
xorb $0x1, 0x40(%rsi)
xorb $0x1, 0x40(%rdx)
movq 0x30(%rsi), %rdx
movb 0x40(%rdx), %r8b
xorb $0x1, %r8b
movb %r8b, 0x40(%rdx)
movq 0x28(%rdx), %rdi
testq %rdi, %rdi
je 0x1cff5
cmpb $0x1, 0x40(%rdi)
jne 0x1cff5
movq 0x30(%rdi), %r9
movq %r9, 0x28(%rdx)
testq %r9, %r9
je 0x1cf8e
movq %rdx, 0x38(%r9)
movq %rdx, 0x30(%rdi)
movb %r8b, 0x40(%rdi)
movb $0x1, 0x40(%rdx)
movq 0x38(%rdx), %r8
movq %r8, 0x38(%rdi)
movq %rdi, 0x38(%rdx)
movq %rdi, 0x30(%rsi)
movq (%rax), %rsi
movq 0x30(%rsi), %rdx
movq 0x28(%rdx), %rdi
movq %rdi, 0x30(%rsi)
testq %rdi, %rdi
je 0x1cfc2
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, (%rax)
xorb $0x1, 0x40(%rdx)
movq 0x28(%rdx), %rsi
xorb $0x1, 0x40(%rsi)
movq 0x30(%rdx), %rdx
xorb $0x1, 0x40(%rdx)
movq (%rax), %rdx
addq $0x28, %rdx
jmp 0x1d10c
testq %rdx, %rdx
je 0x1d04d
cmpb $0x1, 0x40(%rdx)
jne 0x1d04d
movq 0x30(%rdx), %rdi
movq %rdi, 0x28(%rsi)
testq %rdi, %rdi
je 0x1d01d
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, (%rax)
movq 0x8(%r14), %rsi
xorl %edi, %edi
cmpq 0x8(%rdx), %rsi
setg %dil
cmovll %ebp, %edi
testl %edi, %edi
jne 0x1d05f
movq (%rax), %rdx
cmpq $0x0, 0x30(%rdx)
je 0x1d3ac
movq (%rax), %rdx
movq 0x30(%rdx), %r8
testq %r8, %r8
je 0x1d101
cmpb $0x0, 0x40(%r8)
jne 0x1d101
movq 0x28(%r8), %rsi
testq %rsi, %rsi
je 0x1d089
cmpb $0x0, 0x40(%rsi)
jne 0x1d101
xorb $0x1, 0x40(%rdx)
movq 0x28(%rdx), %rsi
xorb $0x1, 0x40(%rsi)
xorb $0x1, 0x40(%r8)
movq 0x28(%rsi), %rdi
testq %rdi, %rdi
je 0x1d0ed
cmpb $0x1, 0x40(%rdi)
jne 0x1d0ed
movq 0x30(%rsi), %rdi
movq %rdi, 0x28(%rdx)
testq %rdi, %rdi
je 0x1d0ba
movq %rdx, 0x38(%rdi)
movq %rdx, 0x30(%rsi)
movb 0x40(%rdx), %dil
movb %dil, 0x40(%rsi)
movb $0x1, 0x40(%rdx)
movq 0x38(%rdx), %rdi
movq %rdi, 0x38(%rsi)
movq %rsi, 0x38(%rdx)
movq %rsi, (%rax)
xorb $0x1, 0x40(%rsi)
movq 0x28(%rsi), %rdx
xorb $0x1, 0x40(%rdx)
movq 0x30(%rsi), %rdx
xorb $0x1, 0x40(%rdx)
movq (%rax), %rdx
movq 0x8(%r14), %rsi
xorl %edi, %edi
cmpq 0x8(%rdx), %rsi
setg %dil
cmovll %ebp, %edi
movq (%rax), %rdx
addq $0x30, %rdx
testl %edi, %edi
je 0x1d15e
movq (%rdx), %rsi
movq %rdx, %rax
testq %rsi, %rsi
jne 0x1cf11
jmp 0x1d4a5
movq 0x38(%r14), %r12
testq %r12, %r12
je 0x1d3a4
cmpq %r14, 0x28(%r12)
je 0x1cf02
movq %r14, %rax
movq 0x38(%rax), %r12
testq %r12, %r12
je 0x1cf02
cmpq 0x30(%r12), %rax
movq %r12, %rax
je 0x1d13b
jmp 0x1cf02
xorl %ecx, %ecx
jmp 0x1d4a5
movq (%rdx), %rsi
movq 0x28(%rsi), %rcx
movq %rdx, %rdi
testq %rcx, %rcx
je 0x1d243
cmpb $0x0, 0x40(%rcx)
jne 0x1d22f
movq 0x28(%rcx), %r8
testq %r8, %r8
je 0x1d18f
cmpb $0x0, 0x40(%r8)
jne 0x1d22f
xorb $0x1, 0x40(%rsi)
xorb $0x1, 0x40(%rcx)
movq 0x30(%rsi), %rcx
movb 0x40(%rcx), %r9b
xorb $0x1, %r9b
movb %r9b, 0x40(%rcx)
movq 0x28(%rcx), %r8
testq %r8, %r8
je 0x1d22f
cmpb $0x1, 0x40(%r8)
jne 0x1d22f
movq 0x30(%r8), %r10
movq %r10, 0x28(%rcx)
testq %r10, %r10
je 0x1d1c8
movq %rcx, 0x38(%r10)
movq %rcx, 0x30(%r8)
movb %r9b, 0x40(%r8)
movb $0x1, 0x40(%rcx)
movq 0x38(%rcx), %r9
movq %r9, 0x38(%r8)
movq %r8, 0x38(%rcx)
movq %r8, 0x30(%rsi)
movq (%rdi), %rsi
movq 0x30(%rsi), %rcx
movq 0x28(%rcx), %r8
movq %r8, 0x30(%rsi)
testq %r8, %r8
je 0x1d1fc
movq %rsi, 0x38(%r8)
movq %rsi, 0x28(%rcx)
movb 0x40(%rsi), %r8b
movb %r8b, 0x40(%rcx)
movb $0x1, 0x40(%rsi)
movq 0x38(%rsi), %r8
movq %r8, 0x38(%rcx)
movq %rcx, 0x38(%rsi)
movq %rcx, (%rdi)
xorb $0x1, 0x40(%rcx)
movq 0x28(%rcx), %rsi
xorb $0x1, 0x40(%rsi)
movq 0x30(%rcx), %rcx
xorb $0x1, 0x40(%rcx)
movq (%rdi), %rdi
movq 0x28(%rdi), %rsi
addq $0x28, %rdi
movq 0x28(%rsi), %rcx
jmp 0x1d168
movq 0x38(%rsi), %rcx
movq $0x0, (%rdi)
cmpq %rdx, %rdi
je 0x1d366
movq %r15, %rdi
cmpq (%r15), %rcx
je 0x1d273
movq 0x38(%rcx), %rdi
cmpq 0x28(%rdi), %rcx
je 0x1d26f
addq $0x30, %rdi
jmp 0x1d273
addq $0x28, %rdi
movq 0x38(%rcx), %rcx
movq (%rdi), %r8
movq 0x30(%r8), %r9
testq %r9, %r9
je 0x1d2cb
cmpb $0x1, 0x40(%r9)
jne 0x1d2cb
movq 0x28(%r8), %r10
testq %r10, %r10
je 0x1d29a
cmpb $0x0, 0x40(%r10)
jne 0x1d2cb
movq 0x28(%r9), %r10
movq %r10, 0x30(%r8)
testq %r10, %r10
je 0x1d2ab
movq %r8, 0x38(%r10)
movq %r8, 0x28(%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 (%rdi), %r8
movq 0x28(%r8), %r9
testq %r9, %r9
je 0x1d31f
cmpb $0x1, 0x40(%r9)
jne 0x1d31f
movq 0x28(%r9), %r10
testq %r10, %r10
je 0x1d31f
cmpb $0x1, 0x40(%r10)
jne 0x1d31f
movq 0x30(%r9), %r10
movq %r10, 0x28(%r8)
testq %r10, %r10
je 0x1d2ff
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 (%rdi), %r8
movq 0x28(%r8), %r9
testq %r9, %r9
je 0x1d24e
cmpb $0x1, 0x40(%r9)
jne 0x1d24e
movq 0x30(%r8), %r10
testq %r10, %r10
je 0x1d24e
cmpb $0x1, 0x40(%r10)
jne 0x1d24e
xorb $0x1, 0x40(%r8)
xorb $0x1, 0x40(%r9)
xorb $0x1, 0x40(%r10)
jmp 0x1d24e
movq (%rax), %rcx
movb 0x40(%rcx), %dl
movb %dl, 0x40(%rsi)
movq 0x38(%rcx), %rcx
movq %rcx, 0x38(%rsi)
movq (%rax), %rcx
movq 0x30(%rcx), %rcx
movq %rcx, 0x30(%rsi)
testq %rcx, %rcx
je 0x1d38b
movq %rsi, 0x38(%rcx)
movq (%rax), %rcx
movq 0x28(%rcx), %rcx
movq %rcx, 0x28(%rsi)
testq %rcx, %rcx
je 0x1d39f
movq %rsi, 0x38(%rcx)
movq %rsi, %rcx
jmp 0x1d3ae
xorl %r12d, %r12d
jmp 0x1cf02
xorl %esi, %esi
movq %rsi, (%rax)
jmp 0x1d4a5
movq %r15, %rax
cmpq (%r15), %rcx
je 0x1d3d2
movq 0x38(%rcx), %rax
cmpq 0x28(%rax), %rcx
je 0x1d3ce
addq $0x30, %rax
jmp 0x1d3d2
addq $0x28, %rax
movq 0x38(%rcx), %rcx
movq (%rax), %rdx
movq 0x30(%rdx), %rsi
testq %rsi, %rsi
je 0x1d427
cmpb $0x1, 0x40(%rsi)
jne 0x1d427
movq 0x28(%rdx), %rdi
testq %rdi, %rdi
je 0x1d3f7
cmpb $0x0, 0x40(%rdi)
jne 0x1d427
movq 0x28(%rsi), %rdi
movq %rdi, 0x30(%rdx)
testq %rdi, %rdi
je 0x1d408
movq %rdx, 0x38(%rdi)
movq %rdx, 0x28(%rsi)
movb 0x40(%rdx), %dil
movb %dil, 0x40(%rsi)
movb $0x1, 0x40(%rdx)
movq 0x38(%rdx), %rdi
movq %rdi, 0x38(%rsi)
movq %rsi, 0x38(%rdx)
movq %rsi, (%rax)
movq (%rax), %rdx
movq 0x28(%rdx), %rsi
testq %rsi, %rsi
je 0x1d478
cmpb $0x1, 0x40(%rsi)
jne 0x1d478
movq 0x28(%rsi), %rdi
testq %rdi, %rdi
je 0x1d478
cmpb $0x1, 0x40(%rdi)
jne 0x1d478
movq 0x30(%rsi), %rdi
movq %rdi, 0x28(%rdx)
testq %rdi, %rdi
je 0x1d459
movq %rdx, 0x38(%rdi)
movq %rdx, 0x30(%rsi)
movb 0x40(%rdx), %dil
movb %dil, 0x40(%rsi)
movb $0x1, 0x40(%rdx)
movq 0x38(%rdx), %rdi
movq %rdi, 0x38(%rsi)
movq %rsi, 0x38(%rdx)
movq %rsi, (%rax)
movq (%rax), %rax
movq 0x28(%rax), %rdx
testq %rdx, %rdx
je 0x1d4a5
cmpb $0x1, 0x40(%rdx)
jne 0x1d4a5
movq 0x30(%rax), %rsi
testq %rsi, %rsi
je 0x1d4a5
cmpb $0x1, 0x40(%rsi)
jne 0x1d4a5
xorb $0x1, 0x40(%rax)
xorb $0x1, 0x40(%rdx)
xorb $0x1, 0x40(%rsi)
testq %rcx, %rcx
jne 0x1d3b6
movq (%r15), %rax
testq %rax, %rax
je 0x1d4ba
movb $0x0, 0x40(%rax)
movq 0x20(%r14), %rdi
callq 0xfa20
movq %r14, %rdi
callq 0xff30
movq %r12, %r14
testq %r12, %r12
jne 0x1cee9
movl 0x1c4(%rbx), %edi
cmpl $-0x1, %edi
je 0x1d4f1
callq 0x10a10
movl $0xffffffff, 0x1c4(%rbx) # imm = 0xFFFFFFFF
movl 0x1c8(%rbx), %edi
cmpl $-0x1, %edi
je 0x1d50b
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