fdtab[fd].owner = conn;
fdtab[fd].iocb = conn_fd_handler;
- fd_insert(fd);
+ fd_insert(fd, tid_bit);
/* mark the fd as ready so as not to needlessly poll at the beginning */
fd_may_recv(fd);
fd_may_send(fd);
}
/* Prepares <fd> for being polled */
-static inline void fd_insert(int fd)
+static inline void fd_insert(int fd, unsigned long thread_mask)
{
SPIN_LOCK(FD_LOCK, &fdtab[fd].lock);
fdtab[fd].ev = 0;
fdtab[fd].linger_risk = 0;
fdtab[fd].cloned = 0;
fdtab[fd].cache = 0;
- fdtab[fd].process_mask = 0; // unused for now
+ fdtab[fd].process_mask = thread_mask;
SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock);
SPIN_LOCK(FDTAB_LOCK, &fdtab_lock);
dgram->t.sock.fd = fd;
fdtab[fd].owner = dgram;
fdtab[fd].iocb = dgram_fd_handler;
- fd_insert(fd);
+ fd_insert(fd, (unsigned long)-1);
fd_want_recv(fd);
return 0;
}
fcntl(mworker_pipe[0], F_SETFL, O_NONBLOCK);
fdtab[mworker_pipe[0]].owner = mworker_pipe;
fdtab[mworker_pipe[0]].iocb = mworker_pipe_handler;
- fd_insert(mworker_pipe[0]);
+ fd_insert(mworker_pipe[0], MAX_THREADS_MASK);
fd_want_recv(mworker_pipe[0]);
}
fdtab[rfd].owner = NULL;
fdtab[rfd].iocb = thread_sync_io_handler;
- fd_insert(rfd);
+ fd_insert(rfd, MAX_THREADS_MASK);
all_threads_mask = mask;
return 0;
fdtab[fd].owner = listener; /* reference the listener instead of a task */
fdtab[fd].iocb = listener->proto->accept;
- fd_insert(fd);
+ fd_insert(fd, MAX_THREADS_MASK);
tcp_return:
if (msg && errlen) {
listener->state = LI_LISTEN;
/* the function for the accept() event */
- fd_insert(fd);
fdtab[fd].iocb = listener->proto->accept;
fdtab[fd].owner = listener; /* reference the listener instead of a task */
+ fd_insert(fd, MAX_THREADS_MASK);
return err;
err_rename:
afd = add_fd[i];
fdtab[afd].owner = conn;
fdtab[afd].iocb = ssl_async_fd_handler;
- fd_insert(afd);
+ fd_insert(afd, tid_bit);
}
num_add_fds = 0;