{
eassert (fd >= 0 && fd < FD_SETSIZE);
eassert (fd_callback_info[fd].func == NULL);
+
+ fd_callback_info[fd].flags &= ~KEYBOARD_FD;
fd_callback_info[fd].flags |= FOR_READ;
if (fd > max_desc)
max_desc = fd;
void
add_write_fd (int fd, fd_callback func, void *data)
{
- if (fd > max_desc)
- max_desc = fd;
+ eassert (fd >= 0 && fd < FD_SETSIZE);
fd_callback_info[fd].func = func;
fd_callback_info[fd].data = data;
fd_callback_info[fd].flags |= FOR_WRITE;
+ if (fd > max_desc)
+ max_desc = fd;
}
static void
{
struct Lisp_Process *proc = XPROCESS (process);
- proc->thread = Qnil;
+ pset_thread (proc, Qnil);
if (proc->infd >= 0)
fd_callback_info[proc->infd].thread = NULL;
if (proc->outfd >= 0)
else if (EQ (p->filter, Qt)
/* Network or serial process not stopped: */
&& !EQ (p->command, Qt))
- add_non_keyboard_read_fd (p->infd);
+ add_process_read_fd (p->infd);
}
DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
}
proc = XPROCESS (process);
- proc->thread = thread;
+ pset_thread (proc, thread);
if (proc->infd >= 0)
fd_callback_info[proc->infd].thread = tstate;
if (proc->outfd >= 0)
p->pty_flag = pty_flag;
pset_status (p, Qrun);
- add_process_read_fd (inchannel);
+ if (!EQ (p->command, Qt))
+ add_process_read_fd (inchannel);
/* This may signal an error. */
setup_process_coding_systems (process);
pset_status (p, Qrun);
setup_process_coding_systems (process);
- add_non_keyboard_read_fd (pty_fd);
+ add_process_read_fd (pty_fd);
pset_tty_name (p, build_string (pty_name));
}
eassert (! p->pty_flag);
if (!EQ (p->command, Qt))
- add_non_keyboard_read_fd (inchannel);
+ add_process_read_fd (inchannel);
p->adaptive_read_buffering
= (NILP (Vprocess_adaptive_read_buffering) ? 0
: EQ (Vprocess_adaptive_read_buffering, Qt) ? 1 : 2);
eassert (! p->pty_flag);
if (!EQ (p->command, Qt))
- add_non_keyboard_read_fd (fd);
+ add_process_read_fd (fd);
if (BUFFERP (buffer))
{
still listen for incoming connects unless it is stopped. */
if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
|| (EQ (p->status, Qlisten) && NILP (p->command)))
- add_non_keyboard_read_fd (inch);
+ add_process_read_fd (inch);
if (inch > max_desc)
max_desc = inch;
/* Client processes for accepted connections are not stopped initially. */
if (!EQ (p->filter, Qt))
- add_non_keyboard_read_fd (s);
+ add_process_read_fd (s);
+ if (s > max_desc)
+ max_desc = s;
/* Setup coding system for new process based on server process.
This seems to be the proper thing to do, as the coding system
if (d->func
&& ((d->flags & FOR_READ
&& FD_ISSET (channel, &Available))
- || (d->flags & FOR_WRITE
+ || ((d->flags & FOR_WRITE)
&& FD_ISSET (channel, &Writeok))))
d->func (channel, d->data);
}
if (0 <= p->infd && !EQ (p->filter, Qt)
&& !EQ (p->command, Qt))
- add_non_keyboard_read_fd (p->infd);
+ add_process_read_fd (p->infd);
}
}
} /* End for each file descriptor. */
&& p->infd >= 0
&& (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
{
- add_non_keyboard_read_fd (p->infd);
+ add_process_read_fd (p->infd);
#ifdef WINDOWSNT
if (fd_info[ p->infd ].flags & FILE_SERIAL)
PurgeComm (fd_info[ p->infd ].hnd, PURGE_RXABORT | PURGE_RXCLEAR);
for (fd = 0; fd <= max_desc; fd++)
if (FD_ISSET (fd, mask)
- && ((fd_callback_info[fd].flags & KEYBOARD_FD) != 0))
+ && ((fd_callback_info[fd].flags & (FOR_READ | KEYBOARD_FD))
+ == (FOR_READ | KEYBOARD_FD)))
return 1;
return 0;
add_timer_wait_descriptor (int fd)
{
add_read_fd (fd, timerfd_callback, NULL);
- if (fd > max_desc)
- max_desc = fd;
+ fd_callback_info[fd].flags &= ~KEYBOARD_FD;
}
#endif /* HAVE_TIMERFD */
{
#ifdef subprocesses /* Actually means "not MSDOS". */
eassert (desc >= 0 && desc < FD_SETSIZE);
+ fd_callback_info[desc].flags &= ~PROCESS_FD;
fd_callback_info[desc].flags |= (FOR_READ | KEYBOARD_FD);
if (desc > max_desc)
max_desc = desc;
extern BOOL g_b_init_debug_break_process;
int sys_select (int, SELECT_TYPE *, SELECT_TYPE *, SELECT_TYPE *,
- struct timespec *, void *);
+ struct timespec *, sigset_t *);
/* Signal handlers...SIG_DFL == 0 so this is initialized correctly. */
static signal_handler sig_handlers[NSIG];
int
sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
- struct timespec *timeout, void *ignored)
+ struct timespec *timeout, sigset_t *ignored)
{
SELECT_TYPE orfds, owfds;
DWORD timeout_ms, start_time;