Mercurial > emacs
comparison src/process.c @ 90851:31beec9ee600
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 751-770)
- Update from CVS
- Merge from emacs--rel--22
- Update from CVS: lisp/textmodes/sgml-mode.el: Revert last change.
- Merge from gnus--rel--5.10
* emacs--rel--22 (patch 18-25)
* gnus--rel--5.10 (patch 222-223)
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-208
author | Miles Bader <miles@gnu.org> |
---|---|
date | Thu, 24 May 2007 21:31:10 +0000 |
parents | e6fdae9180d4 9247e9d47488 |
children | 3371fc48749b |
comparison
equal
deleted
inserted
replaced
90850:7d184cd91770 | 90851:31beec9ee600 |
---|---|
326 | 326 |
327 /* Mask of bits indicating the descriptors that we wait for input on. */ | 327 /* Mask of bits indicating the descriptors that we wait for input on. */ |
328 | 328 |
329 static SELECT_TYPE input_wait_mask; | 329 static SELECT_TYPE input_wait_mask; |
330 | 330 |
331 /* Mask that excludes keyboard input descriptor (s). */ | 331 /* Mask that excludes keyboard input descriptor(s). */ |
332 | 332 |
333 static SELECT_TYPE non_keyboard_wait_mask; | 333 static SELECT_TYPE non_keyboard_wait_mask; |
334 | 334 |
335 /* Mask that excludes process input descriptor (s). */ | 335 /* Mask that excludes process input descriptor(s). */ |
336 | 336 |
337 static SELECT_TYPE non_process_wait_mask; | 337 static SELECT_TYPE non_process_wait_mask; |
338 | |
339 /* Mask for the gpm mouse input descriptor. */ | |
340 | |
341 static SELECT_TYPE gpm_wait_mask; | |
338 | 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 |
342 and added to the input_wait_mask and non_keyboard_wait_mask. */ | 346 and added to the input_wait_mask and non_keyboard_wait_mask. */ |
354 /* The largest descriptor currently in use for a process object. */ | 358 /* The largest descriptor currently in use for a process object. */ |
355 static int max_process_desc; | 359 static int max_process_desc; |
356 | 360 |
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; |
363 | |
364 /* The largest descriptor currently in use for gpm mouse input. */ | |
365 static int max_gpm_desc; | |
359 | 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 |
363 /* Indexed by descriptor, gives the process (if any) for that descriptor */ | 370 /* Indexed by descriptor, gives the process (if any) for that descriptor */ |
4443 FD_CLR (0, &Atemp); | 4450 FD_CLR (0, &Atemp); |
4444 #endif | 4451 #endif |
4445 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); | 4452 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); |
4446 | 4453 |
4447 EMACS_SET_SECS_USECS (timeout, 0, 0); | 4454 EMACS_SET_SECS_USECS (timeout, 0, 0); |
4448 if ((select (max (max_process_desc, max_keyboard_desc) + 1, | 4455 if ((select (max (max (max_process_desc, max_keyboard_desc), |
4456 max_gpm_desc) + 1, | |
4449 &Atemp, | 4457 &Atemp, |
4450 #ifdef NON_BLOCKING_CONNECT | 4458 #ifdef NON_BLOCKING_CONNECT |
4451 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), | 4459 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), |
4452 #else | 4460 #else |
4453 (SELECT_TYPE *)0, | 4461 (SELECT_TYPE *)0, |
4588 EMACS_SET_SECS_USECS (timeout, 0, usecs); | 4596 EMACS_SET_SECS_USECS (timeout, 0, usecs); |
4589 process_output_skip = 0; | 4597 process_output_skip = 0; |
4590 } | 4598 } |
4591 #endif | 4599 #endif |
4592 | 4600 |
4593 nfds = select (max (max_process_desc, max_keyboard_desc) + 1, | 4601 nfds = select (max (max (max_process_desc, max_keyboard_desc), |
4602 max_gpm_desc) + 1, | |
4594 &Available, | 4603 &Available, |
4595 #ifdef NON_BLOCKING_CONNECT | 4604 #ifdef NON_BLOCKING_CONNECT |
4596 (check_connect ? &Connecting : (SELECT_TYPE *)0), | 4605 (check_connect ? &Connecting : (SELECT_TYPE *)0), |
4597 #else | 4606 #else |
4598 (SELECT_TYPE *)0, | 4607 (SELECT_TYPE *)0, |
6882 FD_SET (desc, &non_process_wait_mask); | 6891 FD_SET (desc, &non_process_wait_mask); |
6883 if (desc > max_keyboard_desc) | 6892 if (desc > max_keyboard_desc) |
6884 max_keyboard_desc = desc; | 6893 max_keyboard_desc = desc; |
6885 } | 6894 } |
6886 | 6895 |
6896 static int add_gpm_wait_descriptor_called_flag; | |
6897 | |
6898 void | |
6899 add_gpm_wait_descriptor (desc) | |
6900 int desc; | |
6901 { | |
6902 if (! add_gpm_wait_descriptor_called_flag) | |
6903 FD_CLR (0, &input_wait_mask); | |
6904 add_gpm_wait_descriptor_called_flag = 1; | |
6905 FD_SET (desc, &input_wait_mask); | |
6906 FD_SET (desc, &gpm_wait_mask); | |
6907 if (desc > max_gpm_desc) | |
6908 max_gpm_desc = desc; | |
6909 } | |
6910 | |
6887 /* From now on, do not expect DESC to give keyboard input. */ | 6911 /* From now on, do not expect DESC to give keyboard input. */ |
6888 | 6912 |
6889 void | 6913 void |
6890 delete_keyboard_wait_descriptor (desc) | 6914 delete_keyboard_wait_descriptor (desc) |
6891 int desc; | 6915 int desc; |
6897 FD_CLR (desc, &non_process_wait_mask); | 6921 FD_CLR (desc, &non_process_wait_mask); |
6898 | 6922 |
6899 if (desc == max_keyboard_desc) | 6923 if (desc == max_keyboard_desc) |
6900 for (fd = 0; fd < lim; fd++) | 6924 for (fd = 0; fd < lim; fd++) |
6901 if (FD_ISSET (fd, &input_wait_mask) | 6925 if (FD_ISSET (fd, &input_wait_mask) |
6902 && !FD_ISSET (fd, &non_keyboard_wait_mask)) | 6926 && !FD_ISSET (fd, &non_keyboard_wait_mask) |
6927 && !FD_ISSET (fd, &gpm_wait_mask)) | |
6903 max_keyboard_desc = fd; | 6928 max_keyboard_desc = fd; |
6929 } | |
6930 | |
6931 void | |
6932 delete_gpm_wait_descriptor (desc) | |
6933 int desc; | |
6934 { | |
6935 int fd; | |
6936 int lim = max_gpm_desc; | |
6937 | |
6938 FD_CLR (desc, &input_wait_mask); | |
6939 FD_CLR (desc, &non_process_wait_mask); | |
6940 | |
6941 if (desc == max_gpm_desc) | |
6942 for (fd = 0; fd < lim; fd++) | |
6943 if (FD_ISSET (fd, &input_wait_mask) | |
6944 && !FD_ISSET (fd, &non_keyboard_wait_mask) | |
6945 && !FD_ISSET (fd, &non_process_wait_mask)) | |
6946 max_gpm_desc = fd; | |
6904 } | 6947 } |
6905 | 6948 |
6906 /* Return nonzero if *MASK has a bit set | 6949 /* Return nonzero if *MASK has a bit set |
6907 that corresponds to one of the keyboard input descriptors. */ | 6950 that corresponds to one of the keyboard input descriptors. */ |
6908 | 6951 |