running-process 4.0.0__tar.gz → 4.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {running_process-4.0.0 → running_process-4.0.2}/Cargo.lock +24 -14
- {running_process-4.0.0 → running_process-4.0.2}/Cargo.toml +1 -1
- {running_process-4.0.0 → running_process-4.0.2}/PKG-INFO +28 -7
- {running_process-4.0.0 → running_process-4.0.2}/README.md +27 -6
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/Cargo.toml +23 -2
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/proto/daemon.proto +83 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/client.rs +6 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/mod.rs +6 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/pty_session.rs +6 -0
- running_process-4.0.2/crates/running-process/src/client/telemetry.rs +264 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/console_detect.rs +3 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/containment.rs +2 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/attach_stream.rs +67 -6
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/mod.rs +4 -0
- running_process-4.0.2/crates/running-process/src/daemon/handlers/telemetry.rs +403 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers_tests.rs +193 -2
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/mod.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pipe_attach_stream.rs +67 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pipe_sessions.rs +227 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pty_sessions.rs +166 -4
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/runtime_gc.rs +97 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/server.rs +22 -6
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/shadow.rs +73 -0
- running_process-4.0.2/crates/running-process/src/daemon/telemetry.rs +937 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/lib.rs +82 -2
- running_process-4.0.2/crates/running-process/src/pty/backend.rs +405 -0
- running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/child.rs +93 -0
- running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/mod.rs +474 -0
- running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/pipes.rs +79 -0
- running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/proc_thread_attr.rs +102 -0
- running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/pseudoconsole.rs +100 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/mod.rs +29 -4
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/native_pty_process.rs +48 -40
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/pty_posix.rs +5 -2
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn_imp_unix.rs +8 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn_imp_windows.rs +5 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/types.rs +10 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_autostart_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_backlog_accumulation_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_cross_process_pty_attach_test.rs +36 -11
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_fast_ctrl_c_handoff_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/main.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_non_tty_attach_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_pipe_session_attach_test.rs +76 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_pty_session_attach_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_resize_rpc_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_runpm_service_stubs.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_sessions_bulk_ops_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_sessions_log_test.rs +1 -0
- running_process-4.0.2/crates/running-process/tests/daemon_tee_ring_test.rs +337 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_termination_outcome_test.rs +1 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_tree_kill_test.rs +1 -0
- running_process-4.0.2/crates/running-process/tests/daemon_tui_repaint_test.rs +206 -0
- running_process-4.0.2/crates/running-process/tests/interactive_pty_session_test.rs +171 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/originator_test.rs +15 -1
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/process_core_test.rs +79 -2
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/pty_conhost_job_test.rs +11 -0
- running_process-4.0.2/crates/running-process/tests/pty_master_public_api_test.rs +93 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/Cargo.toml +1 -1
- {running_process-4.0.0 → running_process-4.0.2}/pyproject.toml +1 -1
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/__init__.py +1 -1
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/cli.py +5 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_idle_waiter.py +5 -1
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_classmethod_api.py +5 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_wait_methods.py +7 -0
- {running_process-4.0.0 → running_process-4.0.2}/LICENSE +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/build.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/daemon.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/runpm.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/trampoline.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/paths.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/pipe_session.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/config.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/core.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/kill.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/maintenance.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/pipe_sessions_handlers.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/process_tree.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/pty_sessions_handlers.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/registry_handlers.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/services.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/spawn.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/util.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/idle.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/mod.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/unix.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/windows.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/reaper.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/registry.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/helpers.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/originator.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/pty_windows.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/terminal_input.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/public_symbols.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/rust_debug.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/tests.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/unix.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/windows.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/containment_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/compiler_wrap_seam_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/env_replace_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/more_tests.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/stdout_seam_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/fs_adversarial_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/spawn_test.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/containment.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/daemon_client.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/debug_traces.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/helpers.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/idle_detector.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/lib.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/metrics.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/originator.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pid_tracking.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/priority.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/process.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/process_tree.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pty_buffer.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pty_process.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/public_symbols.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/py_native_process.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/registry.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/signal_bool.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/terminal_input.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/control_churn.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/expect_match.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/idle_detector.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/mod.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/parse_command.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/process_tree.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/pty_buffer.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/pty_process.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/registry.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/signal_bool.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/terminal_input.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/test-watchdog/Cargo.toml +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/crates/test-watchdog/src/lib.rs +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/assets/example.txt +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/command_render.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/compat.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/console_encoding.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/daemon.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/dashboard.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/exit_status.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/expect.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/interrupt_handler.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/launch.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/line_iterator.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/output_formatter.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/priority.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/process_utils.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/processor_cli.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/__init__.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_command.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_console_io.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_errors.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_idle_helpers.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_idle_state.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_interactive.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_process_helpers.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pseudo_terminal.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_expect.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_input_relay.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_reader.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_wait_for.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_terminal_strip.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_types.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_wait_input.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/__init__.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_core.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_helpers.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_iter.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_subprocess.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_types.py +0 -0
- {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process_manager.py +0 -0
|
@@ -59,7 +59,7 @@ version = "1.1.5"
|
|
|
59
59
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
60
60
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
|
61
61
|
dependencies = [
|
|
62
|
-
"windows-sys",
|
|
62
|
+
"windows-sys 0.61.2",
|
|
63
63
|
]
|
|
64
64
|
|
|
65
65
|
[[package]]
|
|
@@ -70,7 +70,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|
|
70
70
|
dependencies = [
|
|
71
71
|
"anstyle",
|
|
72
72
|
"once_cell_polyfill",
|
|
73
|
-
"windows-sys",
|
|
73
|
+
"windows-sys 0.61.2",
|
|
74
74
|
]
|
|
75
75
|
|
|
76
76
|
[[package]]
|
|
@@ -226,7 +226,7 @@ dependencies = [
|
|
|
226
226
|
"libc",
|
|
227
227
|
"option-ext",
|
|
228
228
|
"redox_users",
|
|
229
|
-
"windows-sys",
|
|
229
|
+
"windows-sys 0.61.2",
|
|
230
230
|
]
|
|
231
231
|
|
|
232
232
|
[[package]]
|
|
@@ -260,7 +260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
260
260
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
261
261
|
dependencies = [
|
|
262
262
|
"libc",
|
|
263
|
-
"windows-sys",
|
|
263
|
+
"windows-sys 0.61.2",
|
|
264
264
|
]
|
|
265
265
|
|
|
266
266
|
[[package]]
|
|
@@ -461,7 +461,7 @@ dependencies = [
|
|
|
461
461
|
"recvmsg",
|
|
462
462
|
"tokio",
|
|
463
463
|
"widestring",
|
|
464
|
-
"windows-sys",
|
|
464
|
+
"windows-sys 0.61.2",
|
|
465
465
|
]
|
|
466
466
|
|
|
467
467
|
[[package]]
|
|
@@ -632,7 +632,7 @@ checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
|
|
|
632
632
|
dependencies = [
|
|
633
633
|
"libc",
|
|
634
634
|
"wasi",
|
|
635
|
-
"windows-sys",
|
|
635
|
+
"windows-sys 0.61.2",
|
|
636
636
|
]
|
|
637
637
|
|
|
638
638
|
[[package]]
|
|
@@ -668,7 +668,7 @@ version = "0.50.3"
|
|
|
668
668
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
669
669
|
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
|
670
670
|
dependencies = [
|
|
671
|
-
"windows-sys",
|
|
671
|
+
"windows-sys 0.61.2",
|
|
672
672
|
]
|
|
673
673
|
|
|
674
674
|
[[package]]
|
|
@@ -1026,7 +1026,7 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
|
|
|
1026
1026
|
|
|
1027
1027
|
[[package]]
|
|
1028
1028
|
name = "running-process"
|
|
1029
|
-
version = "4.0.
|
|
1029
|
+
version = "4.0.2"
|
|
1030
1030
|
dependencies = [
|
|
1031
1031
|
"anyhow",
|
|
1032
1032
|
"bytes",
|
|
@@ -1053,11 +1053,12 @@ dependencies = [
|
|
|
1053
1053
|
"tracing",
|
|
1054
1054
|
"tracing-subscriber",
|
|
1055
1055
|
"winapi",
|
|
1056
|
+
"windows-sys 0.59.0",
|
|
1056
1057
|
]
|
|
1057
1058
|
|
|
1058
1059
|
[[package]]
|
|
1059
1060
|
name = "running-process-py"
|
|
1060
|
-
version = "4.0.
|
|
1061
|
+
version = "4.0.2"
|
|
1061
1062
|
dependencies = [
|
|
1062
1063
|
"interprocess",
|
|
1063
1064
|
"libc",
|
|
@@ -1102,7 +1103,7 @@ dependencies = [
|
|
|
1102
1103
|
"errno",
|
|
1103
1104
|
"libc",
|
|
1104
1105
|
"linux-raw-sys",
|
|
1105
|
-
"windows-sys",
|
|
1106
|
+
"windows-sys 0.61.2",
|
|
1106
1107
|
]
|
|
1107
1108
|
|
|
1108
1109
|
[[package]]
|
|
@@ -1183,7 +1184,7 @@ checksum = "9eb6ea5562eeaed6936b8b54e086aa0f88b9e5b1bef45beb038e2519fa1185b1"
|
|
|
1183
1184
|
dependencies = [
|
|
1184
1185
|
"cfg-if",
|
|
1185
1186
|
"libc",
|
|
1186
|
-
"windows-sys",
|
|
1187
|
+
"windows-sys 0.61.2",
|
|
1187
1188
|
]
|
|
1188
1189
|
|
|
1189
1190
|
[[package]]
|
|
@@ -1246,7 +1247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
1246
1247
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
|
1247
1248
|
dependencies = [
|
|
1248
1249
|
"libc",
|
|
1249
|
-
"windows-sys",
|
|
1250
|
+
"windows-sys 0.61.2",
|
|
1250
1251
|
]
|
|
1251
1252
|
|
|
1252
1253
|
[[package]]
|
|
@@ -1297,7 +1298,7 @@ dependencies = [
|
|
|
1297
1298
|
"getrandom 0.4.2",
|
|
1298
1299
|
"once_cell",
|
|
1299
1300
|
"rustix",
|
|
1300
|
-
"windows-sys",
|
|
1301
|
+
"windows-sys 0.61.2",
|
|
1301
1302
|
]
|
|
1302
1303
|
|
|
1303
1304
|
[[package]]
|
|
@@ -1375,7 +1376,7 @@ dependencies = [
|
|
|
1375
1376
|
"signal-hook-registry",
|
|
1376
1377
|
"socket2",
|
|
1377
1378
|
"tokio-macros",
|
|
1378
|
-
"windows-sys",
|
|
1379
|
+
"windows-sys 0.61.2",
|
|
1379
1380
|
]
|
|
1380
1381
|
|
|
1381
1382
|
[[package]]
|
|
@@ -1663,6 +1664,15 @@ version = "0.2.1"
|
|
|
1663
1664
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1664
1665
|
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
|
1665
1666
|
|
|
1667
|
+
[[package]]
|
|
1668
|
+
name = "windows-sys"
|
|
1669
|
+
version = "0.59.0"
|
|
1670
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1671
|
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
|
1672
|
+
dependencies = [
|
|
1673
|
+
"windows-targets",
|
|
1674
|
+
]
|
|
1675
|
+
|
|
1666
1676
|
[[package]]
|
|
1667
1677
|
name = "windows-sys"
|
|
1668
1678
|
version = "0.61.2"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: running_process
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
License-File: LICENSE
|
|
5
5
|
Summary: A Rust-backed subprocess wrapper with split stdout/stderr streaming
|
|
6
6
|
Home-Page: https://github.com/zackees/running-process
|
|
@@ -200,6 +200,11 @@ PTY behavior:
|
|
|
200
200
|
|
|
201
201
|
There is also a compatibility alias: `RunningProcess.psuedo_terminal(...)`.
|
|
202
202
|
|
|
203
|
+
Rust consumers should make the same transport choice explicitly: use
|
|
204
|
+
`NativeProcess` for one-shot noninteractive work and
|
|
205
|
+
`InteractivePtySession` / `NativePtyProcess` only for real terminal sessions.
|
|
206
|
+
See [Rust PTY guidance](docs/RUST_PTY.md).
|
|
207
|
+
|
|
203
208
|
You can also inspect the intended interactive launch semantics without launching a child:
|
|
204
209
|
|
|
205
210
|
```python
|
|
@@ -283,7 +288,7 @@ PTY mode is intentionally more conservative:
|
|
|
283
288
|
./test
|
|
284
289
|
```
|
|
285
290
|
|
|
286
|
-
`./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version.
|
|
291
|
+
`./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version. Rust build commands run through `uvx soldr`, so there is no separate `soldr` install step to maintain.
|
|
287
292
|
|
|
288
293
|
`./lint` applies `cargo fmt` and Ruff autofixes before running the remaining lint checks, so fixable issues are rewritten in place.
|
|
289
294
|
|
|
@@ -291,16 +296,32 @@ PTY mode is intentionally more conservative:
|
|
|
291
296
|
|
|
292
297
|
On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
|
|
293
298
|
|
|
294
|
-
|
|
299
|
+
For a live-only test run with the timeout crash watchdog and automatic thread
|
|
300
|
+
dumps still enabled, use:
|
|
295
301
|
|
|
296
|
-
|
|
302
|
+
```bash
|
|
303
|
+
uv run -m ci.test --live-only
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
For a narrower live-only selection, pass pytest targets and selectors through
|
|
307
|
+
the same entrypoint:
|
|
297
308
|
|
|
298
309
|
```bash
|
|
299
|
-
|
|
300
|
-
./_cargo fmt --all --check
|
|
301
|
-
./_cargo clippy --workspace --all-targets -- -D warnings
|
|
310
|
+
uv run -m ci.test --live-only tests/test_pty_support.py interrupt
|
|
302
311
|
```
|
|
303
312
|
|
|
313
|
+
For direct Cargo build commands, use `uvx soldr` directly:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
uvx soldr cargo check --workspace
|
|
317
|
+
uvx soldr cargo test --workspace
|
|
318
|
+
uvx soldr cargo package -p running-process --no-verify
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Keep `maturin`, `cargo fmt`, and `cargo clippy` on their normal entrypoints.
|
|
322
|
+
This repo's high-level scripts already choose the compatible path for those
|
|
323
|
+
tools.
|
|
324
|
+
|
|
304
325
|
On Windows, native rebuilds that compile bundled C code should run from a Visual Studio developer shell. When the environment is ambiguous, point `maturin` at the MSVC toolchain binaries directly rather than relying on the generic cargo proxy.
|
|
305
326
|
|
|
306
327
|
For local extension rebuilds, prefer:
|
|
@@ -186,6 +186,11 @@ PTY behavior:
|
|
|
186
186
|
|
|
187
187
|
There is also a compatibility alias: `RunningProcess.psuedo_terminal(...)`.
|
|
188
188
|
|
|
189
|
+
Rust consumers should make the same transport choice explicitly: use
|
|
190
|
+
`NativeProcess` for one-shot noninteractive work and
|
|
191
|
+
`InteractivePtySession` / `NativePtyProcess` only for real terminal sessions.
|
|
192
|
+
See [Rust PTY guidance](docs/RUST_PTY.md).
|
|
193
|
+
|
|
189
194
|
You can also inspect the intended interactive launch semantics without launching a child:
|
|
190
195
|
|
|
191
196
|
```python
|
|
@@ -269,7 +274,7 @@ PTY mode is intentionally more conservative:
|
|
|
269
274
|
./test
|
|
270
275
|
```
|
|
271
276
|
|
|
272
|
-
`./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version.
|
|
277
|
+
`./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version. Rust build commands run through `uvx soldr`, so there is no separate `soldr` install step to maintain.
|
|
273
278
|
|
|
274
279
|
`./lint` applies `cargo fmt` and Ruff autofixes before running the remaining lint checks, so fixable issues are rewritten in place.
|
|
275
280
|
|
|
@@ -277,16 +282,32 @@ PTY mode is intentionally more conservative:
|
|
|
277
282
|
|
|
278
283
|
On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
|
|
279
284
|
|
|
280
|
-
|
|
285
|
+
For a live-only test run with the timeout crash watchdog and automatic thread
|
|
286
|
+
dumps still enabled, use:
|
|
281
287
|
|
|
282
|
-
|
|
288
|
+
```bash
|
|
289
|
+
uv run -m ci.test --live-only
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
For a narrower live-only selection, pass pytest targets and selectors through
|
|
293
|
+
the same entrypoint:
|
|
283
294
|
|
|
284
295
|
```bash
|
|
285
|
-
|
|
286
|
-
./_cargo fmt --all --check
|
|
287
|
-
./_cargo clippy --workspace --all-targets -- -D warnings
|
|
296
|
+
uv run -m ci.test --live-only tests/test_pty_support.py interrupt
|
|
288
297
|
```
|
|
289
298
|
|
|
299
|
+
For direct Cargo build commands, use `uvx soldr` directly:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
uvx soldr cargo check --workspace
|
|
303
|
+
uvx soldr cargo test --workspace
|
|
304
|
+
uvx soldr cargo package -p running-process --no-verify
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Keep `maturin`, `cargo fmt`, and `cargo clippy` on their normal entrypoints.
|
|
308
|
+
This repo's high-level scripts already choose the compatible path for those
|
|
309
|
+
tools.
|
|
310
|
+
|
|
290
311
|
On Windows, native rebuilds that compile bundled C code should run from a Visual Studio developer shell. When the environment is ambiguous, point `maturin` at the MSVC toolchain binaries directly rather than relying on the generic cargo proxy.
|
|
291
312
|
|
|
292
313
|
For local extension rebuilds, prefer:
|
|
@@ -35,13 +35,15 @@ path = "src/bin/trampoline.rs"
|
|
|
35
35
|
# Final feature scheme per #165:
|
|
36
36
|
# * `core` — always-available API (spawn / pty / containment).
|
|
37
37
|
# * `client` — adds proto types + IPC client (prost, interprocess, dirs).
|
|
38
|
-
# * `
|
|
39
|
-
#
|
|
38
|
+
# * `telemetry` — tee sink primitives without the full daemon runtime.
|
|
39
|
+
# * `daemon` — superset of client; adds the full daemon runtime
|
|
40
|
+
# (tokio, rusqlite, tracing, etc.).
|
|
40
41
|
# Default ships `client` so `cargo install running-process` installs
|
|
41
42
|
# the `runpm` binary out of the box (per Q1 resolution in #165:
|
|
42
43
|
# `required-features` are not auto-activated by cargo install).
|
|
43
44
|
default = ["client"]
|
|
44
45
|
core = []
|
|
46
|
+
telemetry = []
|
|
45
47
|
client = ["dep:prost", "dep:prost-types", "dep:interprocess", "dep:dirs", "dep:anyhow", "dep:clap"]
|
|
46
48
|
daemon = [
|
|
47
49
|
"client",
|
|
@@ -96,6 +98,25 @@ serde_json = "1"
|
|
|
96
98
|
tempfile = "3"
|
|
97
99
|
test-watchdog = { path = "../test-watchdog" }
|
|
98
100
|
|
|
101
|
+
# #150: ConPTY passthrough rewrite uses windows-sys directly for the
|
|
102
|
+
# new conpty_passthrough module. Kept alongside (not replacing) the
|
|
103
|
+
# existing winapi 0.3 dep because the rest of the crate's Windows
|
|
104
|
+
# call sites are on winapi and migrating them is out of scope.
|
|
105
|
+
# windows-sys 0.59 exposes CreatePseudoConsole / ResizePseudoConsole /
|
|
106
|
+
# ClosePseudoConsole + PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE directly.
|
|
107
|
+
[target.'cfg(windows)'.dependencies]
|
|
108
|
+
windows-sys = { version = "0.59", features = [
|
|
109
|
+
"Win32_Foundation",
|
|
110
|
+
"Win32_Security",
|
|
111
|
+
"Win32_Storage_FileSystem",
|
|
112
|
+
"Win32_System_Console",
|
|
113
|
+
"Win32_System_IO",
|
|
114
|
+
"Win32_System_Memory",
|
|
115
|
+
"Win32_System_Pipes",
|
|
116
|
+
"Win32_System_Threading",
|
|
117
|
+
"Win32_System_Diagnostics_Debug",
|
|
118
|
+
] }
|
|
119
|
+
|
|
99
120
|
# Wave 5 of #165: extra dev-deps absorbed from `running-process-daemon`
|
|
100
121
|
# for its windows-only and unix-only integration tests.
|
|
101
122
|
[target.'cfg(windows)'.dev-dependencies]
|
|
@@ -63,6 +63,10 @@ enum RequestType {
|
|
|
63
63
|
REQUEST_TYPE_BULK_TERMINATE_SESSIONS = 73;
|
|
64
64
|
// Resize a PTY session without attaching (#130 M5 follow-up).
|
|
65
65
|
REQUEST_TYPE_RESIZE_PTY_SESSION = 74;
|
|
66
|
+
// Optional daemon-owned tee telemetry (#131).
|
|
67
|
+
REQUEST_TYPE_REGISTER_SESSION_TEE = 75;
|
|
68
|
+
REQUEST_TYPE_UNREGISTER_SESSION_TEE = 76;
|
|
69
|
+
REQUEST_TYPE_GET_SESSION_TEE_STATUS = 77;
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
enum StatusCode {
|
|
@@ -133,6 +137,9 @@ message DaemonRequest {
|
|
|
133
137
|
PurgeExitedSessionsRequest purge_exited_sessions = 72;
|
|
134
138
|
BulkTerminateSessionsRequest bulk_terminate_sessions = 73;
|
|
135
139
|
ResizePtySessionRequest resize_pty_session = 74;
|
|
140
|
+
RegisterSessionTeeRequest register_session_tee = 75;
|
|
141
|
+
UnregisterSessionTeeRequest unregister_session_tee = 76;
|
|
142
|
+
GetSessionTeeStatusRequest get_session_tee_status = 77;
|
|
136
143
|
}
|
|
137
144
|
|
|
138
145
|
message DaemonResponse {
|
|
@@ -177,6 +184,9 @@ message DaemonResponse {
|
|
|
177
184
|
PurgeExitedSessionsResponse purge_exited_sessions = 72;
|
|
178
185
|
BulkTerminateSessionsResponse bulk_terminate_sessions = 73;
|
|
179
186
|
ResizePtySessionResponse resize_pty_session = 74;
|
|
187
|
+
RegisterSessionTeeResponse register_session_tee = 75;
|
|
188
|
+
UnregisterSessionTeeResponse unregister_session_tee = 76;
|
|
189
|
+
GetSessionTeeStatusResponse get_session_tee_status = 77;
|
|
180
190
|
}
|
|
181
191
|
|
|
182
192
|
// ---------------------------------------------------------------------------
|
|
@@ -763,6 +773,79 @@ message ResizePtySessionRequest {
|
|
|
763
773
|
}
|
|
764
774
|
message ResizePtySessionResponse {}
|
|
765
775
|
|
|
776
|
+
// ---------------------------------------------------------------------------
|
|
777
|
+
// Optional session tee telemetry (#131).
|
|
778
|
+
// ---------------------------------------------------------------------------
|
|
779
|
+
|
|
780
|
+
enum TeeSessionKind {
|
|
781
|
+
TEE_SESSION_KIND_UNSPECIFIED = 0;
|
|
782
|
+
TEE_SESSION_KIND_PTY = 1;
|
|
783
|
+
TEE_SESSION_KIND_PIPE = 2;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
enum TeeStreamKind {
|
|
787
|
+
TEE_STREAM_KIND_UNSPECIFIED = 0;
|
|
788
|
+
TEE_STREAM_KIND_PTY_OUTPUT = 1;
|
|
789
|
+
TEE_STREAM_KIND_STDOUT = 2;
|
|
790
|
+
TEE_STREAM_KIND_STDERR = 3;
|
|
791
|
+
TEE_STREAM_KIND_STDIN = 4;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
enum TeeSinkKind {
|
|
795
|
+
TEE_SINK_KIND_UNSPECIFIED = 0;
|
|
796
|
+
// Daemon opens the path and owns the file descriptor until the tee is
|
|
797
|
+
// removed or the session ends. Path bytes are OS-native, not UTF-8.
|
|
798
|
+
TEE_SINK_KIND_FILE = 1;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
enum TeeFileMode {
|
|
802
|
+
TEE_FILE_MODE_APPEND = 0;
|
|
803
|
+
TEE_FILE_MODE_TRUNCATE = 1;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
enum TeeBackpressure {
|
|
807
|
+
TEE_BACKPRESSURE_DROP_OLDEST = 0;
|
|
808
|
+
TEE_BACKPRESSURE_BLOCK = 1;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
message RegisterSessionTeeRequest {
|
|
812
|
+
string session_id = 1;
|
|
813
|
+
TeeSessionKind session_kind = 2;
|
|
814
|
+
TeeStreamKind stream = 3;
|
|
815
|
+
TeeSinkKind sink_kind = 4;
|
|
816
|
+
// OS-native path bytes: Unix = OsStr bytes; Windows = little-endian UTF-16.
|
|
817
|
+
bytes file_path = 5;
|
|
818
|
+
TeeFileMode file_mode = 6;
|
|
819
|
+
// 0 means use the daemon default.
|
|
820
|
+
uint32 queue_capacity = 7;
|
|
821
|
+
// false means write missed-byte markers, matching the Rust default.
|
|
822
|
+
bool suppress_missed_markers = 8;
|
|
823
|
+
TeeBackpressure backpressure = 9;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
message RegisterSessionTeeResponse {
|
|
827
|
+
uint64 tee_handle = 1;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
message UnregisterSessionTeeRequest {
|
|
831
|
+
string session_id = 1;
|
|
832
|
+
TeeSessionKind session_kind = 2;
|
|
833
|
+
uint64 tee_handle = 3;
|
|
834
|
+
}
|
|
835
|
+
message UnregisterSessionTeeResponse {}
|
|
836
|
+
|
|
837
|
+
message GetSessionTeeStatusRequest {
|
|
838
|
+
string session_id = 1;
|
|
839
|
+
TeeSessionKind session_kind = 2;
|
|
840
|
+
uint64 tee_handle = 3;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
message GetSessionTeeStatusResponse {
|
|
844
|
+
TeeStreamKind stream = 1;
|
|
845
|
+
uint64 missed_bytes = 2;
|
|
846
|
+
bool disconnected = 3;
|
|
847
|
+
}
|
|
848
|
+
|
|
766
849
|
// Daemon -> client stream frame for an attached stdout/stderr.
|
|
767
850
|
message PipeStreamFrame {
|
|
768
851
|
oneof frame {
|
|
@@ -778,6 +778,12 @@ pub fn connect_or_start(scope_hash: Option<&str>) -> Result<DaemonClient, Client
|
|
|
778
778
|
spawn_daemon()?;
|
|
779
779
|
|
|
780
780
|
// Retry with exponential back-off.
|
|
781
|
+
//
|
|
782
|
+
// #199: intentional — the daemon binds its socket asynchronously
|
|
783
|
+
// after `spawn_daemon()` returns. There's no event the OS can
|
|
784
|
+
// signal us with when the socket is ready, so we poll. Exponential
|
|
785
|
+
// back-off (50→100→200→400ms) is the standard pattern; total
|
|
786
|
+
// wait caps at 750ms.
|
|
781
787
|
let delays_ms: [u64; 4] = [50, 100, 200, 400];
|
|
782
788
|
for delay in delays_ms {
|
|
783
789
|
std::thread::sleep(std::time::Duration::from_millis(delay));
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
//! previously imported from `running_process_client::*` keeps working
|
|
6
6
|
//! when it switches to `running_process::client::*`.
|
|
7
7
|
|
|
8
|
+
#[allow(clippy::module_inception)]
|
|
8
9
|
pub mod client;
|
|
9
10
|
pub mod paths;
|
|
10
11
|
pub mod pipe_session;
|
|
11
12
|
pub mod pty_session;
|
|
13
|
+
pub mod telemetry;
|
|
12
14
|
|
|
13
15
|
pub use client::{
|
|
14
16
|
connect_or_start, daemonize_command, launch_detached, ClientError, DaemonClient,
|
|
@@ -16,3 +18,7 @@ pub use client::{
|
|
|
16
18
|
};
|
|
17
19
|
pub use pipe_session::{PipeSpawnRequest, PipeStreamAttachment, SpawnedPipeSession};
|
|
18
20
|
pub use pty_session::{AttachError, PtyAttachment, PtySpawnRequest, SpawnedPtySession};
|
|
21
|
+
pub use telemetry::{
|
|
22
|
+
SessionTeeBackpressure, SessionTeeFileMode, SessionTeeFileRequest, SessionTeeKind,
|
|
23
|
+
SessionTeeStatus, SessionTeeStream,
|
|
24
|
+
};
|
{running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/pty_session.rs
RENAMED
|
@@ -370,6 +370,12 @@ impl PtyAttachment {
|
|
|
370
370
|
return Ok(None);
|
|
371
371
|
}
|
|
372
372
|
// Sleep a small amount; the OS will buffer incoming data.
|
|
373
|
+
//
|
|
374
|
+
// #199: intentional — `interprocess::local_socket::Stream`
|
|
375
|
+
// lacks a portable peek/ready primitive on Windows. The
|
|
376
|
+
// 20ms poll is the documented fallback. Replacing with
|
|
377
|
+
// an event-based primitive would require a per-platform
|
|
378
|
+
// shim that the upstream crate doesn't expose.
|
|
373
379
|
std::thread::sleep(Duration::from_millis(20));
|
|
374
380
|
// Probe by peeking a single byte: read from reader will block,
|
|
375
381
|
// so we use the BufReader.fill_buf trick by reading 0 bytes
|