// File: /workspace/github_c_makefile_star2_O0/sharpyfox[P]citrusleaf-client/src/cf_queue.c
// Function: cf_queue_priority_pop
int 
cf_queue_priority_pop(cf_queue_priority *q, void *buf, int ms_wait)
{
	QUEUE_LOCK(q);

	struct timespec tp;
	if (ms_wait > 0) {
#ifdef OSX
		uint64_t curms = cf_getms(); // using the cl generic functions defined in cf_clock.h. It is going to have slightly less resolution than the pure linux version
		tp.tv_sec = (curms + ms_wait)/1000;
		tp.tv_nsec = (ms_wait %1000) * 1000000;
#else // linux
		clock_gettime( CLOCK_REALTIME, &tp); 
		tp.tv_sec += ms_wait / 1000;
		tp.tv_nsec += (ms_wait % 1000) * 1000000;
		if (tp.tv_nsec > 1000000000) {
			tp.tv_nsec -= 1000000000;
			tp.tv_sec++;
		}
#endif
	}

	if (q->threadsafe) {
#ifdef EXTERNAL_LOCKS
		if (CF_Q_PRI_EMPTY(q)) {
			QUEUE_UNLOCK(q);
			return -1;
		}
#else
		while (CF_Q_PRI_EMPTY(q)) {
			if (CF_QUEUE_FOREVER == ms_wait) {
				pthread_cond_wait(&q->CV, &q->LOCK);
			}
			else if (CF_QUEUE_NOWAIT == ms_wait) {
				pthread_mutex_unlock(&q->LOCK);
				return(CF_QUEUE_EMPTY);
			}
			else {
				pthread_cond_timedwait(&q->CV, &q->LOCK, &tp);
				if (CF_Q_PRI_EMPTY(q)) {
					pthread_mutex_unlock(&q->LOCK);
					return(CF_QUEUE_EMPTY);
				}
			}
		}
#endif //EXERNAL_LOCKS
	}
	
	int rv;
	if (CF_Q_SZ(q->high_q))
		rv = cf_queue_pop(q->high_q, buf, 0);
	else if (CF_Q_SZ(q->medium_q))
		rv = cf_queue_pop(q->medium_q, buf, 0);
	else if (CF_Q_SZ(q->low_q))
		rv = cf_queue_pop(q->low_q, buf, 0);
	else rv = CF_QUEUE_EMPTY;
		
	QUEUE_UNLOCK(q);

		
	return(rv);
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movl %edx, 0x1c(%rsp)
movq 0x28(%rsp), %rax
testb $0x1, (%rax)
je 0x14eaa
movq 0x28(%rsp), %rdi
addq $0x20, %rdi
callq 0x23e0
cmpl $0x0, 0x1c(%rsp)
jle 0x14f1e
xorl %edi, %edi
leaq 0x8(%rsp), %rsi
callq 0x2260
movl 0x1c(%rsp), %eax
movl $0x3e8, %ecx            # imm = 0x3E8
cltd
idivl %ecx
cltq
addq 0x8(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x1c(%rsp), %eax
movl $0x3e8, %ecx            # imm = 0x3E8
cltd
idivl %ecx
imull $0xf4240, %edx, %eax    # imm = 0xF4240
cltq
addq 0x10(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpq $0x3b9aca00, 0x10(%rsp) # imm = 0x3B9ACA00
jle 0x14f1c
movq 0x10(%rsp), %rax
subq $0x3b9aca00, %rax       # imm = 0x3B9ACA00
movq %rax, 0x10(%rsp)
movq 0x8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x8(%rsp)
jmp 0x14f1e
movq 0x28(%rsp), %rax
testb $0x1, (%rax)
je 0x15074
jmp 0x14f2e
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %ecx
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdx
xorl %eax, %eax
cmpl 0xc(%rdx), %ecx
movb %al, 0x3(%rsp)
jne 0x14f8d
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %ecx
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rdx
xorl %eax, %eax
cmpl 0xc(%rdx), %ecx
movb %al, 0x3(%rsp)
jne 0x14f8d
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x18(%rcx), %rcx
cmpl 0xc(%rcx), %eax
sete %al
movb %al, 0x3(%rsp)
movb 0x3(%rsp), %al
testb $0x1, %al
jne 0x14f9a
jmp 0x15072
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl 0x1c(%rsp), %eax
jne 0x14fc1
movq 0x28(%rsp), %rdi
addq $0x48, %rdi
movq 0x28(%rsp), %rsi
addq $0x20, %rsi
callq 0x2450
jmp 0x1506d
xorl %eax, %eax
cmpl 0x1c(%rsp), %eax
jne 0x14fe4
movq 0x28(%rsp), %rdi
addq $0x20, %rdi
callq 0x21c0
movl $0xfffffffe, 0x34(%rsp) # imm = 0xFFFFFFFE
jmp 0x15148
movq 0x28(%rsp), %rdi
addq $0x48, %rdi
movq 0x28(%rsp), %rsi
addq $0x20, %rsi
leaq 0x8(%rsp), %rdx
callq 0x2440
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x8(%rcx), %rcx
cmpl 0xc(%rcx), %eax
jne 0x15069
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x10(%rcx), %rcx
cmpl 0xc(%rcx), %eax
jne 0x15069
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x18(%rcx), %rcx
cmpl 0xc(%rcx), %eax
jne 0x15069
movq 0x28(%rsp), %rdi
addq $0x20, %rdi
callq 0x21c0
movl $0xfffffffe, 0x34(%rsp) # imm = 0xFFFFFFFE
jmp 0x15148
jmp 0x1506b
jmp 0x1506d
jmp 0x14f2e
jmp 0x15074
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x18(%rcx), %rcx
subl 0xc(%rcx), %eax
cmpl $0x0, %eax
je 0x150ac
movq 0x28(%rsp), %rax
movq 0x18(%rax), %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
callq 0x14590
movl %eax, 0x4(%rsp)
jmp 0x15128
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x10(%rcx), %rcx
subl 0xc(%rcx), %eax
cmpl $0x0, %eax
je 0x150e4
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
callq 0x14590
movl %eax, 0x4(%rsp)
jmp 0x15126
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %eax
movq 0x28(%rsp), %rcx
movq 0x8(%rcx), %rcx
subl 0xc(%rcx), %eax
cmpl $0x0, %eax
je 0x1511c
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
callq 0x14590
movl %eax, 0x4(%rsp)
jmp 0x15124
movl $0xfffffffe, 0x4(%rsp)  # imm = 0xFFFFFFFE
jmp 0x15126
jmp 0x15128
movq 0x28(%rsp), %rax
testb $0x1, (%rax)
je 0x15140
movq 0x28(%rsp), %rdi
addq $0x20, %rdi
callq 0x21c0
movl 0x4(%rsp), %eax
movl %eax, 0x34(%rsp)
movl 0x34(%rsp), %eax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)