diff options
| author | Miles Bader | 2007-05-20 23:29:14 +0000 |
|---|---|---|
| committer | Miles Bader | 2007-05-20 23:29:14 +0000 |
| commit | 7be1c21aedb2f8e7b7831d494e065a31afe13146 (patch) | |
| tree | a998f949002bf05307fe6b59969e6ebfb0c88b8d /src/process.c | |
| parent | 3c28868aeb2d445830019837294e96f432456754 (diff) | |
| parent | 26114bc08f03789f30f0acca925955f2139df690 (diff) | |
| download | emacs-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.c | 49 |
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 | ||
| 337 | static SELECT_TYPE non_process_wait_mask; | 337 | static SELECT_TYPE non_process_wait_mask; |
| 338 | 338 | ||
| 339 | /* Mask for the gpm mouse input descriptor. */ | ||
| 340 | |||
| 341 | static 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. */ |
| 358 | static int max_keyboard_desc; | 362 | static int max_keyboard_desc; |
| 359 | 363 | ||
| 364 | /* The largest descriptor currently in use for gpm mouse input. */ | ||
| 365 | static 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. */ |
| 361 | static int delete_exited_processes; | 368 | static 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 | ||
| 6987 | static int add_gpm_wait_descriptor_called_flag; | ||
| 6988 | |||
| 6989 | void | ||
| 6990 | add_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 | ||
| 6980 | void | 7004 | void |
| @@ -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 | ||
| 7022 | void | ||
| 7023 | delete_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 | ||