# HG changeset patch # User Kim F. Storm # Date 1099307051 0 # Node ID 8abbe69dfdb27af09022968806e47bce45bccdad # Parent 75b388c4e9e1b16ac2e269adc51fc065a9c9232f (connect_wait_mask, num_pending_connects): Only declare and use them if NON_BLOCKING_CONNECT is defined. (IF_NON_BLOCKING_CONNECT): New helper macro. (wait_reading_process_output): Only declare and use local vars Connecting and check_connect when NON_BLOCKING_CONNECT is defined. (init_process): Initialize them if NON_BLOCKING_CONNECT defined. diff -r 75b388c4e9e1 -r 8abbe69dfdb2 src/process.c --- a/src/process.c Mon Nov 01 11:03:51 2004 +0000 +++ b/src/process.c Mon Nov 01 11:04:11 2004 +0000 @@ -310,6 +310,7 @@ 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,6 +320,11 @@ /* 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,12 +3678,14 @@ 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,8 +4046,11 @@ { register int channel, nfds; SELECT_TYPE Available; +#ifdef NON_BLOCKING_CONNECT SELECT_TYPE Connecting; - int check_connect, check_delay, no_avail; + int check_connect; +#endif + int check_delay, no_avail; int xerrno; Lisp_Object proc; EMACS_TIME timeout, end_time; @@ -4050,7 +4061,9 @@ 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,7 +4200,10 @@ timeout to get our attention. */ if (update_tick != process_tick && do_display) { - SELECT_TYPE Atemp, Ctemp; + SELECT_TYPE Atemp; +#ifdef NON_BLOCKING_CONNECT + SELECT_TYPE Ctemp; +#endif Atemp = input_wait_mask; #if 0 @@ -4199,11 +4215,16 @@ */ FD_CLR (0, &Atemp); #endif - Ctemp = connect_wait_mask; + 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,12 +4284,14 @@ if (XINT (wait_proc->infd) < 0) /* Terminated */ break; FD_SET (XINT (wait_proc->infd), &Available); - check_connect = check_delay = 0; + check_delay = 0; + IF_NON_BLOCKING_CONNECT (check_connect = 0); } else if (!NILP (wait_for_cell)) { Available = non_process_wait_mask; - check_connect = check_delay = 0; + check_delay = 0; + IF_NON_BLOCKING_CONNECT (check_connect = 0); } else { @@ -4276,7 +4299,7 @@ Available = non_keyboard_wait_mask; else Available = input_wait_mask; - check_connect = (num_pending_connects > 0); + IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0)); check_delay = wait_channel >= 0 ? 0 : process_output_delay_count; } @@ -4301,8 +4324,10 @@ } 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,7 +4358,11 @@ 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,7 +4418,7 @@ if (no_avail) { FD_ZERO (&Available); - check_connect = 0; + IF_NON_BLOCKING_CONNECT (check_connect = 0); } #if defined(sun) && !defined(USG5_4) @@ -6628,6 +6657,11 @@ 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;