static void event_disable_readwrite(ACL_EVENT *eventp, ACL_VSTREAM *stream) { const char *myname = "event_disable_readwrite"; EVENT_POLL_THR *event_thr = (EVENT_POLL_THR *) eventp; ACL_EVENT_FDTABLE *fdp; ACL_SOCKET sockfd; sockfd = ACL_VSTREAM_SOCK(stream); fdp = (ACL_EVENT_FDTABLE *) stream->fdp; if (fdp == NULL) { acl_msg_error("%s(%d): fdp null", myname, __LINE__); return; } if ((fdp->flag & (EVENT_FDTABLE_FLAG_READ | EVENT_FDTABLE_FLAG_WRITE)) == 0) { acl_msg_error("%s(%d): sockfd(%d) not be set", myname, __LINE__, sockfd); return; } if (fdp->fdidx == -1) acl_msg_fatal("%s(%d): fdidx(%d) invalid", myname, __LINE__, fdp->fdidx); THREAD_LOCK(&event_thr->event.tb_mutex); if (eventp->maxfd == sockfd) eventp->maxfd = ACL_SOCKET_INVALID; if (eventp->fdtabs[fdp->fdidx] != fdp) acl_msg_fatal("%s(%d): fdidx(%d)'s fdp invalid", myname, __LINE__, fdp->fdidx); if (fdp->fdidx < --eventp->fdcnt) { eventp->fdtabs[fdp->fdidx] = eventp->fdtabs[eventp->fdcnt]; eventp->fdtabs[fdp->fdidx]->fdidx = fdp->fdidx; event_thr->fds[fdp->fdidx] = event_thr->fds[eventp->fdcnt]; } acl_fdmap_del(event_thr->fdmap, sockfd); THREAD_UNLOCK(&event_thr->event.tb_mutex); if (fdp->flag & EVENT_FDTABLE_FLAG_READ) stream->nrefer--; if (fdp->flag & EVENT_FDTABLE_FLAG_WRITE) stream->nrefer--; event_fdtable_reset(fdp); }
static void event_disable_readwrite(ACL_EVENT *eventp, ACL_VSTREAM *stream) { const char *myname = "event_disable_readwrite"; EVENT_KERNEL_THR *event_thr = (EVENT_KERNEL_THR *) eventp; ACL_EVENT_FDTABLE *fdp; ACL_SOCKET sockfd; int err = 0; sockfd = ACL_VSTREAM_SOCK(stream); fdp = (ACL_EVENT_FDTABLE *) stream->fdp; if (fdp == NULL) { acl_msg_error("%s(%d): fdp null", myname, __LINE__); return; } if ((fdp->flag & (EVENT_FDTABLE_FLAG_READ | EVENT_FDTABLE_FLAG_WRITE)) == 0) { acl_msg_error("%s(%d): sockfd(%d) not be set", myname, __LINE__, sockfd); return; } if (fdp->fdidx == -1) acl_msg_fatal("%s(%d): fdidx(%d) invalid", myname, __LINE__, fdp->fdidx); if (eventp->fdtabs[fdp->fdidx] != fdp) acl_msg_fatal("%s(%d): fdidx(%d)'s fdp invalid", myname, __LINE__, fdp->fdidx); THREAD_LOCK(&event_thr->event.tb_mutex); if (fdp->fdidx < --eventp->fdcnt) { eventp->fdtabs[fdp->fdidx] = eventp->fdtabs[eventp->fdcnt]; eventp->fdtabs[fdp->fdidx]->fdidx = fdp->fdidx; } #ifdef USE_FDMAP acl_fdmap_del(event_thr->fdmap, sockfd); #endif #ifdef EVENT_REG_DEL_BOTH EVENT_REG_DEL_BOTH(err, event_thr->event_fd, sockfd); if (fdp->flag & EVENT_FDTABLE_FLAG_READ) stream->nrefer--; if (fdp->flag & EVENT_FDTABLE_FLAG_WRITE) stream->nrefer--; #else if (fdp->flag & EVENT_FDTABLE_FLAG_READ) { EVENT_REG_DEL_READ(err, event_thr->event_fd, sockfd); stream->nrefer--; } if (fdp->flag & EVENT_FDTABLE_FLAG_WRITE) { EVENT_REG_DEL_WRITE(err, event_thr->event_fd, sockfd); stream->nrefer--; } #endif THREAD_UNLOCK(&event_thr->event.tb_mutex); if (err < 0) { acl_msg_fatal("%s: %s: %s", myname, EVENT_REG_DEL_TEXT, acl_last_serror()); } event_fdtable_reset(fdp); }