Mercurial > emacs
comparison src/process.c @ 90192:173dee4e2611
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-61
Merge from emacs--cvs-trunk--0
Patches applied:
* emacs--cvs-trunk--0 (patch 353-357)
- Update from CVS
| author | Miles Bader <miles@gnu.org> |
|---|---|
| date | Thu, 09 Jun 2005 07:13:03 +0000 |
| parents | 5b029ff3b08d 9bde03db5726 |
| children | a1b34dec1104 |
comparison
equal
deleted
inserted
replaced
| 90191:c766b49f5bbd | 90192:173dee4e2611 |
|---|---|
| 270 #ifdef ADAPTIVE_READ_BUFFERING | 270 #ifdef ADAPTIVE_READ_BUFFERING |
| 271 #define READ_OUTPUT_DELAY_INCREMENT 10000 | 271 #define READ_OUTPUT_DELAY_INCREMENT 10000 |
| 272 #define READ_OUTPUT_DELAY_MAX (READ_OUTPUT_DELAY_INCREMENT * 5) | 272 #define READ_OUTPUT_DELAY_MAX (READ_OUTPUT_DELAY_INCREMENT * 5) |
| 273 #define READ_OUTPUT_DELAY_MAX_MAX (READ_OUTPUT_DELAY_INCREMENT * 7) | 273 #define READ_OUTPUT_DELAY_MAX_MAX (READ_OUTPUT_DELAY_INCREMENT * 7) |
| 274 | 274 |
| 275 /* Number of processes which might be delayed. */ | 275 /* Number of processes which have a non-zero read_output_delay, |
| 276 and therefore might be delayed for adaptive read buffering. */ | |
| 276 | 277 |
| 277 static int process_output_delay_count; | 278 static int process_output_delay_count; |
| 278 | 279 |
| 279 /* Non-zero if any process has non-nil process_output_skip. */ | 280 /* Non-zero if any process has non-nil read_output_skip. */ |
| 280 | 281 |
| 281 static int process_output_skip; | 282 static int process_output_skip; |
| 282 | 283 |
| 283 /* Non-nil means to delay reading process output to improve buffering. | 284 /* Non-nil means to delay reading process output to improve buffering. |
| 284 A value of t means that delay is reset after each send, any other | 285 A value of t means that delay is reset after each send, any other |
| 285 non-nil value does not reset the delay. */ | 286 non-nil value does not reset the delay. A value of nil disables |
| 287 adaptive read buffering completely. */ | |
| 286 static Lisp_Object Vprocess_adaptive_read_buffering; | 288 static Lisp_Object Vprocess_adaptive_read_buffering; |
| 287 #else | 289 #else |
| 288 #define process_output_delay_count 0 | 290 #define process_output_delay_count 0 |
| 289 #endif | 291 #endif |
| 290 | 292 |
| 1534 itself; it's all taken care of here. */ | 1536 itself; it's all taken care of here. */ |
| 1535 record_unwind_protect (start_process_unwind, proc); | 1537 record_unwind_protect (start_process_unwind, proc); |
| 1536 | 1538 |
| 1537 XPROCESS (proc)->childp = Qt; | 1539 XPROCESS (proc)->childp = Qt; |
| 1538 XPROCESS (proc)->plist = Qnil; | 1540 XPROCESS (proc)->plist = Qnil; |
| 1539 XPROCESS (proc)->command_channel_p = Qnil; | |
| 1540 XPROCESS (proc)->buffer = buffer; | 1541 XPROCESS (proc)->buffer = buffer; |
| 1541 XPROCESS (proc)->sentinel = Qnil; | 1542 XPROCESS (proc)->sentinel = Qnil; |
| 1542 XPROCESS (proc)->filter = Qnil; | 1543 XPROCESS (proc)->filter = Qnil; |
| 1543 XPROCESS (proc)->filter_multibyte | 1544 XPROCESS (proc)->filter_multibyte |
| 1544 = buffer_defaults.enable_multibyte_characters; | 1545 = buffer_defaults.enable_multibyte_characters; |
| 4318 if (check_connect) | 4319 if (check_connect) |
| 4319 Connecting = connect_wait_mask; | 4320 Connecting = connect_wait_mask; |
| 4320 #endif | 4321 #endif |
| 4321 | 4322 |
| 4322 #ifdef ADAPTIVE_READ_BUFFERING | 4323 #ifdef ADAPTIVE_READ_BUFFERING |
| 4324 /* Set the timeout for adaptive read buffering if any | |
| 4325 process has non-nil read_output_skip and non-zero | |
| 4326 read_output_delay, and we are not reading output for a | |
| 4327 specific wait_channel. It is not executed if | |
| 4328 Vprocess_adaptive_read_buffering is nil. */ | |
| 4323 if (process_output_skip && check_delay > 0) | 4329 if (process_output_skip && check_delay > 0) |
| 4324 { | 4330 { |
| 4325 int usecs = EMACS_USECS (timeout); | 4331 int usecs = EMACS_USECS (timeout); |
| 4326 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX) | 4332 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX) |
| 4327 usecs = READ_OUTPUT_DELAY_MAX; | 4333 usecs = READ_OUTPUT_DELAY_MAX; |
| 4328 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++) | 4334 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++) |
| 4329 { | 4335 { |
| 4330 proc = chan_process[channel]; | 4336 proc = chan_process[channel]; |
| 4331 if (NILP (proc)) | 4337 if (NILP (proc)) |
| 4332 continue; | 4338 continue; |
| 4339 /* Find minimum non-zero read_output_delay among the | |
| 4340 processes with non-nil read_output_skip. */ | |
| 4333 if (XINT (XPROCESS (proc)->read_output_delay) > 0) | 4341 if (XINT (XPROCESS (proc)->read_output_delay) > 0) |
| 4334 { | 4342 { |
| 4335 check_delay--; | 4343 check_delay--; |
| 4336 if (NILP (XPROCESS (proc)->read_output_skip)) | 4344 if (NILP (XPROCESS (proc)->read_output_skip)) |
| 4337 continue; | 4345 continue; |
| 4878 save the same match data in safely recursive fashion. */ | 4886 save the same match data in safely recursive fashion. */ |
| 4879 if (outer_running_asynch_code) | 4887 if (outer_running_asynch_code) |
| 4880 { | 4888 { |
| 4881 Lisp_Object tem; | 4889 Lisp_Object tem; |
| 4882 /* Don't clobber the CURRENT match data, either! */ | 4890 /* Don't clobber the CURRENT match data, either! */ |
| 4883 tem = Fmatch_data (Qnil, Qnil); | 4891 tem = Fmatch_data (Qnil, Qnil, Qnil); |
| 4884 restore_match_data (); | 4892 restore_search_regs (); |
| 4885 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil)); | 4893 record_unwind_save_match_data (); |
| 4886 Fset_match_data (tem); | 4894 Fset_match_data (tem, Qt); |
| 4887 } | 4895 } |
| 4888 | 4896 |
| 4889 /* For speed, if a search happens within this code, | 4897 /* For speed, if a search happens within this code, |
| 4890 save the match data in a special nonrecursive fashion. */ | 4898 save the match data in a special nonrecursive fashion. */ |
| 4891 running_asynch_code = 1; | 4899 running_asynch_code = 1; |
| 4937 Fcons (proc, Fcons (text, Qnil))), | 4945 Fcons (proc, Fcons (text, Qnil))), |
| 4938 !NILP (Vdebug_on_error) ? Qnil : Qerror, | 4946 !NILP (Vdebug_on_error) ? Qnil : Qerror, |
| 4939 read_process_output_error_handler); | 4947 read_process_output_error_handler); |
| 4940 | 4948 |
| 4941 /* If we saved the match data nonrecursively, restore it now. */ | 4949 /* If we saved the match data nonrecursively, restore it now. */ |
| 4942 restore_match_data (); | 4950 restore_search_regs (); |
| 4943 running_asynch_code = outer_running_asynch_code; | 4951 running_asynch_code = outer_running_asynch_code; |
| 4944 | 4952 |
| 4945 /* Handling the process output should not deactivate the mark. */ | 4953 /* Handling the process output should not deactivate the mark. */ |
| 4946 Vdeactivate_mark = odeactivate; | 4954 Vdeactivate_mark = odeactivate; |
| 4947 | 4955 |
| 6336 and we already saved the match data nonrecursively, | 6344 and we already saved the match data nonrecursively, |
| 6337 save the same match data in safely recursive fashion. */ | 6345 save the same match data in safely recursive fashion. */ |
| 6338 if (outer_running_asynch_code) | 6346 if (outer_running_asynch_code) |
| 6339 { | 6347 { |
| 6340 Lisp_Object tem; | 6348 Lisp_Object tem; |
| 6341 tem = Fmatch_data (Qnil, Qnil); | 6349 tem = Fmatch_data (Qnil, Qnil, Qnil); |
| 6342 restore_match_data (); | 6350 restore_search_regs (); |
| 6343 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil)); | 6351 record_unwind_save_match_data (); |
| 6344 Fset_match_data (tem); | 6352 Fset_match_data (tem, Qt); |
| 6345 } | 6353 } |
| 6346 | 6354 |
| 6347 /* For speed, if a search happens within this code, | 6355 /* For speed, if a search happens within this code, |
| 6348 save the match data in a special nonrecursive fashion. */ | 6356 save the match data in a special nonrecursive fashion. */ |
| 6349 running_asynch_code = 1; | 6357 running_asynch_code = 1; |
| 6353 Fcons (proc, Fcons (reason, Qnil))), | 6361 Fcons (proc, Fcons (reason, Qnil))), |
| 6354 !NILP (Vdebug_on_error) ? Qnil : Qerror, | 6362 !NILP (Vdebug_on_error) ? Qnil : Qerror, |
| 6355 exec_sentinel_error_handler); | 6363 exec_sentinel_error_handler); |
| 6356 | 6364 |
| 6357 /* If we saved the match data nonrecursively, restore it now. */ | 6365 /* If we saved the match data nonrecursively, restore it now. */ |
| 6358 restore_match_data (); | 6366 restore_search_regs (); |
| 6359 running_asynch_code = outer_running_asynch_code; | 6367 running_asynch_code = outer_running_asynch_code; |
| 6360 | 6368 |
| 6361 Vdeactivate_mark = odeactivate; | 6369 Vdeactivate_mark = odeactivate; |
| 6362 | 6370 |
| 6363 /* Restore waiting_for_user_input_p as it was | 6371 /* Restore waiting_for_user_input_p as it was |
| 6707 Fprovide (intern ("make-network-process"), subfeatures); | 6715 Fprovide (intern ("make-network-process"), subfeatures); |
| 6708 } | 6716 } |
| 6709 #endif /* HAVE_SOCKETS */ | 6717 #endif /* HAVE_SOCKETS */ |
| 6710 | 6718 |
| 6711 #if defined (DARWIN) || defined (MAC_OSX) | 6719 #if defined (DARWIN) || defined (MAC_OSX) |
| 6712 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive | 6720 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive |
| 6713 processes. As such, we only change the default value. */ | 6721 processes. As such, we only change the default value. */ |
| 6714 if (initialized) | 6722 if (initialized) |
| 6715 { | 6723 { |
| 6716 char *release = get_operating_system_release(); | 6724 char *release = get_operating_system_release(); |
| 6717 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION | 6725 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION |
