/** * stop the events on the fd, not unregister the fd */ int ev_stop(ev_loop_t *loop, int fd, EV_TYPE events) { /*fd in use, and evnets on fd*/ if(loop->fd_records[fd].active && (loop->fd_records[fd].events & events)) { if((loop->fd_records[fd].events & EV_READ) && (events & EV_READ)) { loop->fd_records[fd].events &= (~EV_READ); } if((loop->fd_records[fd].events & EV_WRITE) && (events & EV_WRITE)) { loop->fd_records[fd].events &= (~EV_WRITE); } struct epoll_event ev; ev.events = loop->fd_records[fd].events; if(loop->etmodel) { ev.events |= EPOLLET; } ev.data.fd = fd; if(-1 == epoll_ctl(loop->epfd, EPOLL_CTL_MOD, fd, &ev)) { fprintf(stderr, "epoll_ctl mod in ev_stop\n"); return -1; } if(!(loop->fd_records[fd].events & EV_READ || loop->fd_records[fd].events &EV_WRITE)) { return ev_unregister(loop, fd); } } return 0; }
void cli_cmd_stepover(size_t argc,const sASTNode **argv) { if(argc != 0 && argc != 1) cmds_throwEx(NULL); octa count = 1; if(argc == 1) { sCmdArg first = cmds_evalArg(argv[0],ARGVAL_INT,0,NULL); count = first.d.integer; } if(cpu_isHalted()) cmds_throwEx("CPU is halted. Set the PC or reset the machine!\n"); ev_register(EV_AFTER_EXEC,afterExec); while(count-- > 0) { level = 0; cpu_run(); } ev_unregister(EV_AFTER_EXEC,afterExec); }