// File: lega911[P]ijson/src/server.cpp
// Function: Loop::_migrate_send()
void Loop::_migrate_send() {
    Lock lock = server->autolock(_nloop);

    for (int i = 0; i <= server->max_fd; i++) {
        Connect* conn = server->connections[i];
        if(!conn) continue;
        if(conn->nloop != _nloop) continue;
        if(!conn->go_loop || conn->need_loop == _nloop) continue;
        conn->go_loop = false;
        if(conn->is_closed()) continue;
        set_poll_mode(conn->fd, -1);
        if(server->log & 64) std::cout << "migrate fd " << conn->fd << ", " << _nloop << " -> " << conn->need_loop << std::endl;
        auto loop = server->loops[conn->need_loop];
        loop->accept(conn);

        if(conn->status == Status::migration) {
            loop->accept_request = true;
            loop->wake();
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq 0x18(%rax), %rsi
movl 0x4(%rax), %edx
leaq -0x18(%rbp), %rdi
callq 0x28140
movl $0x0, -0x1c(%rbp)
movq -0x48(%rbp), %rcx
movl -0x1c(%rbp), %eax
movq 0x18(%rcx), %rcx
cmpl 0x8(%rcx), %eax
jg 0x29bbe
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movslq -0x1c(%rbp), %rcx
movq 0x50(%rax,%rcx,8), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x29a23
jmp 0x29bb0
movq -0x48(%rbp), %rcx
movq -0x28(%rbp), %rax
movl 0x38(%rax), %eax
cmpl 0x4(%rcx), %eax
je 0x29a38
jmp 0x29bb0
movq -0x28(%rbp), %rax
testb $0x1, 0x40(%rax)
je 0x29a52
movq -0x48(%rbp), %rcx
movq -0x28(%rbp), %rax
movl 0x3c(%rax), %eax
cmpl 0x4(%rcx), %eax
jne 0x29a57
jmp 0x29bb0
movq -0x28(%rbp), %rax
movb $0x0, 0x40(%rax)
movq -0x28(%rbp), %rdi
callq 0x1fcc0
movb %al, -0x49(%rbp)
jmp 0x29a6d
movb -0x49(%rbp), %al
testb $0x1, %al
jne 0x29a76
jmp 0x29a95
jmp 0x29bb0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x18(%rbp), %rdi
callq 0x2d010
jmp 0x29bd0
movq -0x48(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0xc(%rax), %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x292d0
jmp 0x29aac
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x20(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x29b5e
movq 0x1d506(%rip), %rdi     # 0x46fd0
leaq 0xfa25(%rip), %rsi      # 0x394f6
callq 0x192e0
movq %rax, -0x58(%rbp)
jmp 0x29adc
movq -0x58(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x19490
movq %rax, -0x60(%rbp)
jmp 0x29af2
movq -0x60(%rbp), %rdi
leaq 0xfa05(%rip), %rsi      # 0x39502
callq 0x192e0
movq %rax, -0x68(%rbp)
jmp 0x29b08
movq -0x68(%rbp), %rdi
movq -0x48(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x19490
movq %rax, -0x70(%rbp)
jmp 0x29b1e
movq -0x70(%rbp), %rdi
leaq 0xf9dc(%rip), %rsi      # 0x39505
callq 0x192e0
movq %rax, -0x78(%rbp)
jmp 0x29b34
movq -0x78(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x3c(%rax), %esi
callq 0x19490
movq %rax, -0x80(%rbp)
jmp 0x29b4a
movq -0x80(%rbp), %rdi
movq 0x1d45b(%rip), %rsi     # 0x46fb0
callq 0x19320
jmp 0x29b5c
jmp 0x29b5e
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20050(%rax), %rax
movq -0x28(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x27de0
jmp 0x29b8c
movq -0x28(%rbp), %rax
cmpl $0x3, 0xcc(%rax)
jne 0x29bae
movq -0x40(%rbp), %rax
movb $0x1, 0x10(%rax)
movq -0x40(%rbp), %rdi
callq 0x28aa0
jmp 0x29bac
jmp 0x29bae
jmp 0x29bb0
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x299ee
leaq -0x18(%rbp), %rdi
callq 0x2d010
addq $0x80, %rsp
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x194a0
nopl (%rax)