// File: /workspace/github_c_makefile_star2_O0/buf1024[P]mysch/mysch.c
// Function: mytask
int mytask()
{
    while(1) {
        sleep(g_info.sleep_time);

        if(g_usr1) {
            LOG_DEBUG("catch usr1\n");
            handle_sigusr1();
        }
        if(g_usr2) {
            LOG_DEBUG("catch usr2\n");
            log_flush();
            g_usr2 = 0;
        }
        if(g_chld) {
            LOG_DEBUG("catch child\n");
            handle_sigchild();
        }
        if(g_term) {
            LOG_DEBUG("catch term\n");
            break;
        }

        list_iter* it = list_get_iterator(g_info.progq, AL_START_HEAD);
        list_node* n = NULL;

        while((n = list_next(it)) != NULL) {
            prog_t* p = list_node_value(n);
            if(p->flag < 0) {
                if(p->pid == 0) {
                    // 启动程序
                    run_prog(p);
                    break;
                }
                if(!p->has_pid_file) {
                    if (kill(p->pid, 0) == 0) {
                        // 等待程序结束
                        break;
                    }
                }
                // 程序已经结束，继续
                list_del_node(g_info.progq, n, AL_FREE);

            }else if(p->flag == FORK_ONCE || p->flag == FORK_PERIOD) {
				if (p->flag == FORK_PERIOD) {
					if (p->pid && kill(p->pid, 0) == 0) {
						continue;
					}
	                if (judge_condition(p)) {
	                    run_prog(p);
	                    // 程序已经启动，不管它生死存亡
	                    list_del_node(g_info.progq, n, AL_FREE);
	                    continue;
	                }

				}
                run_prog(p);
                // 程序已经启动，不管它生死存亡
                list_del_node(g_info.progq, n, AL_FREE);
            }else {
                prog_t* f = (prog_t*)
                    list_node_value(list_first(g_info.progq));
                if(f->flag < 0) {
                    // 等待程序结束
                    continue;
                }

                if (judge_condition(p)) {
                    if (p->pid > 0) {
                        if(update_pid(p) != 0) {
                            LOG_ERROR("update_pid failed.\n");
                            continue;
                        }
                        if (kill(p->pid, 0) == 0) {
                            // 程序正运行
                            continue;
                        }
                    }
                    run_prog(p);
                }else{
                    if (p->pid > 0) {
                        if (update_pid(p) != 0) {
                            LOG_ERROR("update_pid failed.\n");
                            continue;
                        }
                        if (kill(p->pid, 0) == 0) {
                            // 程序正运行,干掉它
                            LOG_INFO("killing %d\n", p->pid);
                            kill(p->pid, SIGTERM);
                            waitpid(p->pid, NULL, 0);
                            LOG_INFO("%d killed\n", p->pid);

                            dict_delete(g_info.waitq, &p, sizeof(pid_t));
                        }
                    }
                }
            }
        }

        list_release_iterator(it);
    }

    clean_proccess(g_info.kill_flag);

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl 0x50aa(%rip), %edi      # 0xe568
callq 0x2380
cmpl $0x0, 0x52fa(%rip)      # 0xe7c4
je 0x94e1
jmp 0x94ce
leaq 0x13fe(%rip), %rdi      # 0xa8d3
movb $0x0, %al
callq 0x5520
callq 0x8f40
cmpl $0x0, 0x52e0(%rip)      # 0xe7c8
je 0x950b
jmp 0x94ec
leaq 0x13ec(%rip), %rdi      # 0xa8df
movb $0x0, %al
callq 0x5520
movb $0x0, %al
callq 0x5490
movl $0x0, 0x52bd(%rip)      # 0xe7c8
cmpl $0x0, 0x52ae(%rip)      # 0xe7c0
je 0x9529
jmp 0x9516
leaq 0x13ce(%rip), %rdi      # 0xa8eb
movb $0x0, %al
callq 0x5520
callq 0x8e80
cmpl $0x0, 0x529c(%rip)      # 0xe7cc
je 0x9547
jmp 0x9534
leaq 0x13bd(%rip), %rdi      # 0xa8f8
movb $0x0, %al
callq 0x5520
jmp 0x97bb
movq 0x5262(%rip), %rdi      # 0xe7b0
xorl %esi, %esi
callq 0x40f0
movq %rax, -0x8(%rbp)
movq $0x0, -0x10(%rbp)
movq -0x8(%rbp), %rdi
callq 0x41e0
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x97ad
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, 0xa50(%rax)
jge 0x95e2
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x95a8
movq -0x18(%rbp), %rdi
callq 0x90b0
jmp 0x97ad
movq -0x18(%rbp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x95cb
movq -0x18(%rbp), %rax
movl (%rax), %edi
xorl %esi, %esi
callq 0x2260
cmpl $0x0, %eax
jne 0x95c9
jmp 0x97ad
jmp 0x95cb
movq 0x51de(%rip), %rdi      # 0xe7b0
movq -0x10(%rbp), %rsi
xorl %edx, %edx
callq 0x4040
jmp 0x97a8
movq -0x18(%rbp), %rax
cmpl $0x0, 0xa50(%rax)
je 0x95fc
movq -0x18(%rbp), %rax
cmpl $0x2, 0xa50(%rax)
jne 0x9679
movq -0x18(%rbp), %rax
cmpl $0x2, 0xa50(%rax)
jne 0x9659
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9629
movq -0x18(%rbp), %rax
movl (%rax), %edi
xorl %esi, %esi
callq 0x2260
cmpl $0x0, %eax
jne 0x9629
jmp 0x9561
movq -0x18(%rbp), %rdi
callq 0x8d00
cmpl $0x0, %eax
je 0x9657
movq -0x18(%rbp), %rdi
callq 0x90b0
movq 0x5169(%rip), %rdi      # 0xe7b0
movq -0x10(%rbp), %rsi
xorl %edx, %edx
callq 0x4040
jmp 0x9561
jmp 0x9659
movq -0x18(%rbp), %rdi
callq 0x90b0
movq 0x5147(%rip), %rdi      # 0xe7b0
movq -0x10(%rbp), %rsi
xorl %edx, %edx
callq 0x4040
jmp 0x97a6
movq 0x5130(%rip), %rax      # 0xe7b0
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, 0xa50(%rax)
jge 0x969d
jmp 0x9561
movq -0x18(%rbp), %rdi
callq 0x8d00
cmpl $0x0, %eax
je 0x96fe
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
jle 0x96f0
movq -0x18(%rbp), %rdi
callq 0x9380
cmpl $0x0, %eax
je 0x96d7
jmp 0x96c4
leaq 0x1239(%rip), %rdi      # 0xa904
movb $0x0, %al
callq 0x58a0
jmp 0x9561
movq -0x18(%rbp), %rax
movl (%rax), %edi
xorl %esi, %esi
callq 0x2260
cmpl $0x0, %eax
jne 0x96ee
jmp 0x9561
jmp 0x96f0
movq -0x18(%rbp), %rdi
callq 0x90b0
jmp 0x97a4
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
jle 0x97a2
movq -0x18(%rbp), %rdi
callq 0x9380
cmpl $0x0, %eax
je 0x972e
jmp 0x971b
leaq 0x11e2(%rip), %rdi      # 0xa904
movb $0x0, %al
callq 0x58a0
jmp 0x9561
movq -0x18(%rbp), %rax
movl (%rax), %edi
xorl %esi, %esi
callq 0x2260
cmpl $0x0, %eax
jne 0x97a0
jmp 0x9742
movq -0x18(%rbp), %rax
movl (%rax), %esi
leaq 0x1083(%rip), %rdi      # 0xa7d2
movb $0x0, %al
callq 0x5720
movq -0x18(%rbp), %rax
movl (%rax), %edi
movl $0xf, %esi
callq 0x2260
movq -0x18(%rbp), %rax
movl (%rax), %edi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x22e0
movq -0x18(%rbp), %rax
movl (%rax), %esi
leaq 0x105a(%rip), %rdi      # 0xa7de
movb $0x0, %al
callq 0x5720
movq 0x5026(%rip), %rdi      # 0xe7b8
leaq -0x18(%rbp), %rsi
movl $0x4, %edx
callq 0x2ed0
jmp 0x97a2
jmp 0x97a4
jmp 0x97a6
jmp 0x97a8
jmp 0x9561
movq -0x8(%rbp), %rdi
callq 0x4160
jmp 0x94b8
movl 0x4dab(%rip), %edi      # 0xe56c
callq 0x8fb0
xorl %eax, %eax
addq $0x20, %rsp
popq %rbp
retq
nop