[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/process.c
From: |
Kim F . Storm |
Subject: |
[Emacs-diffs] Changes to emacs/src/process.c |
Date: |
Mon, 01 Nov 2004 06:16:39 -0500 |
Index: emacs/src/process.c
diff -c emacs/src/process.c:1.442 emacs/src/process.c:1.443
*** emacs/src/process.c:1.442 Wed Sep 29 23:43:08 2004
--- emacs/src/process.c Mon Nov 1 11:04:11 2004
***************
*** 310,315 ****
--- 310,316 ----
static SELECT_TYPE non_process_wait_mask;
+ #ifdef NON_BLOCKING_CONNECT
/* Mask of bits indicating the descriptors that we wait for connect to
complete on. Once they complete, they are removed from this mask
and added to the input_wait_mask and non_keyboard_wait_mask. */
***************
*** 319,324 ****
--- 320,330 ----
/* Number of bits set in connect_wait_mask. */
static int num_pending_connects;
+ #define IF_NON_BLOCKING_CONNECT(s) s
+ #else
+ #define IF_NON_BLOCKING_CONNECT(s)
+ #endif
+
/* The largest descriptor currently in use for a process object. */
static int max_process_desc;
***************
*** 3672,3683 ****
--- 3678,3691 ----
chan_process[inchannel] = Qnil;
FD_CLR (inchannel, &input_wait_mask);
FD_CLR (inchannel, &non_keyboard_wait_mask);
+ #ifdef NON_BLOCKING_CONNECT
if (FD_ISSET (inchannel, &connect_wait_mask))
{
FD_CLR (inchannel, &connect_wait_mask);
if (--num_pending_connects < 0)
abort ();
}
+ #endif
if (inchannel == max_process_desc)
{
int i;
***************
*** 4038,4045 ****
{
register int channel, nfds;
SELECT_TYPE Available;
SELECT_TYPE Connecting;
! int check_connect, check_delay, no_avail;
int xerrno;
Lisp_Object proc;
EMACS_TIME timeout, end_time;
--- 4046,4056 ----
{
register int channel, nfds;
SELECT_TYPE Available;
+ #ifdef NON_BLOCKING_CONNECT
SELECT_TYPE Connecting;
! int check_connect;
! #endif
! int check_delay, no_avail;
int xerrno;
Lisp_Object proc;
EMACS_TIME timeout, end_time;
***************
*** 4050,4056 ****
--- 4061,4069 ----
int saved_waiting_for_user_input_p = waiting_for_user_input_p;
FD_ZERO (&Available);
+ #ifdef NON_BLOCKING_CONNECT
FD_ZERO (&Connecting);
+ #endif
/* If wait_proc is a process to watch, set wait_channel accordingly. */
if (wait_proc != NULL)
***************
*** 4187,4193 ****
timeout to get our attention. */
if (update_tick != process_tick && do_display)
{
! SELECT_TYPE Atemp, Ctemp;
Atemp = input_wait_mask;
#if 0
--- 4200,4209 ----
timeout to get our attention. */
if (update_tick != process_tick && do_display)
{
! SELECT_TYPE Atemp;
! #ifdef NON_BLOCKING_CONNECT
! SELECT_TYPE Ctemp;
! #endif
Atemp = input_wait_mask;
#if 0
***************
*** 4199,4209 ****
*/
FD_CLR (0, &Atemp);
#endif
! Ctemp = connect_wait_mask;
EMACS_SET_SECS_USECS (timeout, 0, 0);
if ((select (max (max_process_desc, max_keyboard_desc) + 1,
&Atemp,
(num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
(SELECT_TYPE *)0, &timeout)
<= 0))
{
--- 4215,4230 ----
*/
FD_CLR (0, &Atemp);
#endif
! IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
!
EMACS_SET_SECS_USECS (timeout, 0, 0);
if ((select (max (max_process_desc, max_keyboard_desc) + 1,
&Atemp,
+ #ifdef NON_BLOCKING_CONNECT
(num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
+ #else
+ (SELECT_TYPE *)0,
+ #endif
(SELECT_TYPE *)0, &timeout)
<= 0))
{
***************
*** 4263,4274 ****
if (XINT (wait_proc->infd) < 0) /* Terminated */
break;
FD_SET (XINT (wait_proc->infd), &Available);
! check_connect = check_delay = 0;
}
else if (!NILP (wait_for_cell))
{
Available = non_process_wait_mask;
! check_connect = check_delay = 0;
}
else
{
--- 4284,4297 ----
if (XINT (wait_proc->infd) < 0) /* Terminated */
break;
FD_SET (XINT (wait_proc->infd), &Available);
! check_delay = 0;
! IF_NON_BLOCKING_CONNECT (check_connect = 0);
}
else if (!NILP (wait_for_cell))
{
Available = non_process_wait_mask;
! check_delay = 0;
! IF_NON_BLOCKING_CONNECT (check_connect = 0);
}
else
{
***************
*** 4276,4282 ****
Available = non_keyboard_wait_mask;
else
Available = input_wait_mask;
! check_connect = (num_pending_connects > 0);
check_delay = wait_channel >= 0 ? 0 : process_output_delay_count;
}
--- 4299,4305 ----
Available = non_keyboard_wait_mask;
else
Available = input_wait_mask;
! IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0));
check_delay = wait_channel >= 0 ? 0 : process_output_delay_count;
}
***************
*** 4301,4308 ****
--- 4324,4333 ----
}
else
{
+ #ifdef NON_BLOCKING_CONNECT
if (check_connect)
Connecting = connect_wait_mask;
+ #endif
#ifdef ADAPTIVE_READ_BUFFERING
if (process_output_skip && check_delay > 0)
***************
*** 4333,4339 ****
--- 4358,4368 ----
nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
&Available,
+ #ifdef NON_BLOCKING_CONNECT
(check_connect ? &Connecting : (SELECT_TYPE *)0),
+ #else
+ (SELECT_TYPE *)0,
+ #endif
(SELECT_TYPE *)0, &timeout);
}
***************
*** 4389,4395 ****
if (no_avail)
{
FD_ZERO (&Available);
! check_connect = 0;
}
#if defined(sun) && !defined(USG5_4)
--- 4418,4424 ----
if (no_avail)
{
FD_ZERO (&Available);
! IF_NON_BLOCKING_CONNECT (check_connect = 0);
}
#if defined(sun) && !defined(USG5_4)
***************
*** 6628,6633 ****
--- 6657,6667 ----
FD_ZERO (&non_process_wait_mask);
max_process_desc = 0;
+ #ifdef NON_BLOCKING_CONNECT
+ FD_ZERO (&connect_wait_mask);
+ num_pending_connects = 0;
+ #endif
+
#ifdef ADAPTIVE_READ_BUFFERING
process_output_delay_count = 0;
process_output_skip = 0;
- [Emacs-diffs] Changes to emacs/src/process.c,
Kim F . Storm <=