aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorMiles Bader2007-05-20 23:29:14 +0000
committerMiles Bader2007-05-20 23:29:14 +0000
commit7be1c21aedb2f8e7b7831d494e065a31afe13146 (patch)
treea998f949002bf05307fe6b59969e6ebfb0c88b8d /src/process.c
parent3c28868aeb2d445830019837294e96f432456754 (diff)
parent26114bc08f03789f30f0acca925955f2139df690 (diff)
downloademacs-7be1c21aedb2f8e7b7831d494e065a31afe13146.tar.gz
emacs-7be1c21aedb2f8e7b7831d494e065a31afe13146.zip
Merged from emacs--devo--0
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-744 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-745 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-746 Merge from emacs--rel--22 * emacs@sv.gnu.org/emacs--devo--0--patch-747 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-748 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-749 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-750 Merge from emacs--rel--22 * emacs@sv.gnu.org/emacs--devo--0--patch-751 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-752 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-753 Merge from emacs--rel--22 * emacs@sv.gnu.org/emacs--devo--0--patch-754 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-755 Merge from emacs--rel--22 * emacs@sv.gnu.org/emacs--devo--0--patch-756 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-757 Update from CVS: lisp/textmodes/sgml-mode.el: Revert last change. * emacs@sv.gnu.org/emacs--devo--0--patch-758 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-759 Merge from emacs--rel--22 * emacs@sv.gnu.org/emacs--devo--0--patch-760 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-761 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-14 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-15 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-16 Update from CVS: src/xterm.c (XTread_socket): Revert last change. * emacs@sv.gnu.org/emacs--rel--22--patch-17 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-18 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-19 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-20 Update from CVS * emacs@sv.gnu.org/emacs--rel--22--patch-21 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-221 Update from CVS Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-12 Creator: Karoly Lorentey <karoly@lorentey.hu>
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c49
1 files changed, 46 insertions, 3 deletions
diff --git a/src/process.c b/src/process.c
index bd12f3e1a68..9a7cf29963f 100644
--- a/src/process.c
+++ b/src/process.c
@@ -336,6 +336,10 @@ static SELECT_TYPE non_keyboard_wait_mask;
336 336
337static SELECT_TYPE non_process_wait_mask; 337static SELECT_TYPE non_process_wait_mask;
338 338
339/* Mask for the gpm mouse input descriptor. */
340
341static SELECT_TYPE gpm_wait_mask;
342
339#ifdef NON_BLOCKING_CONNECT 343#ifdef NON_BLOCKING_CONNECT
340/* Mask of bits indicating the descriptors that we wait for connect to 344/* Mask of bits indicating the descriptors that we wait for connect to
341 complete on. Once they complete, they are removed from this mask 345 complete on. Once they complete, they are removed from this mask
@@ -357,6 +361,9 @@ static int max_process_desc;
357/* The largest descriptor currently in use for keyboard input. */ 361/* The largest descriptor currently in use for keyboard input. */
358static int max_keyboard_desc; 362static int max_keyboard_desc;
359 363
364/* The largest descriptor currently in use for gpm mouse input. */
365static int max_gpm_desc;
366
360/* Nonzero means delete a process right away if it exits. */ 367/* Nonzero means delete a process right away if it exits. */
361static int delete_exited_processes; 368static int delete_exited_processes;
362 369
@@ -4451,7 +4458,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4451 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); 4458 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
4452 4459
4453 EMACS_SET_SECS_USECS (timeout, 0, 0); 4460 EMACS_SET_SECS_USECS (timeout, 0, 0);
4454 if ((select (max (max_process_desc, max_keyboard_desc) + 1, 4461 if ((select (max (max (max_process_desc, max_keyboard_desc),
4462 max_gpm_desc) + 1,
4455 &Atemp, 4463 &Atemp,
4456#ifdef NON_BLOCKING_CONNECT 4464#ifdef NON_BLOCKING_CONNECT
4457 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), 4465 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
@@ -4596,7 +4604,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4596 } 4604 }
4597#endif 4605#endif
4598 4606
4599 nfds = select (max (max_process_desc, max_keyboard_desc) + 1, 4607 nfds = select (max (max (max_process_desc, max_keyboard_desc),
4608 max_gpm_desc) + 1,
4600 &Available, 4609 &Available,
4601#ifdef NON_BLOCKING_CONNECT 4610#ifdef NON_BLOCKING_CONNECT
4602 (check_connect ? &Connecting : (SELECT_TYPE *)0), 4611 (check_connect ? &Connecting : (SELECT_TYPE *)0),
@@ -6975,6 +6984,21 @@ add_keyboard_wait_descriptor (desc)
6975 max_keyboard_desc = desc; 6984 max_keyboard_desc = desc;
6976} 6985}
6977 6986
6987static int add_gpm_wait_descriptor_called_flag;
6988
6989void
6990add_gpm_wait_descriptor (desc)
6991 int desc;
6992{
6993 if (! add_gpm_wait_descriptor_called_flag)
6994 FD_CLR (0, &input_wait_mask);
6995 add_gpm_wait_descriptor_called_flag = 1;
6996 FD_SET (desc, &input_wait_mask);
6997 FD_SET (desc, &gpm_wait_mask);
6998 if (desc > max_gpm_desc)
6999 max_gpm_desc = desc;
7000}
7001
6978/* From now on, do not expect DESC to give keyboard input. */ 7002/* From now on, do not expect DESC to give keyboard input. */
6979 7003
6980void 7004void
@@ -6990,10 +7014,29 @@ delete_keyboard_wait_descriptor (desc)
6990 if (desc == max_keyboard_desc) 7014 if (desc == max_keyboard_desc)
6991 for (fd = 0; fd < lim; fd++) 7015 for (fd = 0; fd < lim; fd++)
6992 if (FD_ISSET (fd, &input_wait_mask) 7016 if (FD_ISSET (fd, &input_wait_mask)
6993 && !FD_ISSET (fd, &non_keyboard_wait_mask)) 7017 && !FD_ISSET (fd, &non_keyboard_wait_mask)
7018 && !FD_ISSET (fd, &gpm_wait_mask))
6994 max_keyboard_desc = fd; 7019 max_keyboard_desc = fd;
6995} 7020}
6996 7021
7022void
7023delete_gpm_wait_descriptor (desc)
7024 int desc;
7025{
7026 int fd;
7027 int lim = max_gpm_desc;
7028
7029 FD_CLR (desc, &input_wait_mask);
7030 FD_CLR (desc, &non_process_wait_mask);
7031
7032 if (desc == max_gpm_desc)
7033 for (fd = 0; fd < lim; fd++)
7034 if (FD_ISSET (fd, &input_wait_mask)
7035 && !FD_ISSET (fd, &non_keyboard_wait_mask)
7036 && !FD_ISSET (fd, &non_process_wait_mask))
7037 max_gpm_desc = fd;
7038}
7039
6997/* Return nonzero if *MASK has a bit set 7040/* Return nonzero if *MASK has a bit set
6998 that corresponds to one of the keyboard input descriptors. */ 7041 that corresponds to one of the keyboard input descriptors. */
6999 7042