running-process 4.6.1__tar.gz → 4.6.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.
Files changed (441) hide show
  1. {running_process-4.6.1 → running_process-4.6.2}/Cargo.lock +8 -7
  2. {running_process-4.6.1 → running_process-4.6.2}/Cargo.toml +1 -1
  3. {running_process-4.6.1 → running_process-4.6.2}/PKG-INFO +1 -1
  4. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/running-process-broker-v2.rs +46 -8
  5. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lib/mod.rs +3 -1
  6. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lib/wire.rs +61 -1
  7. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/admin.rs +4 -1
  8. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/connection.rs +16 -14
  9. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/control_socket.rs +1 -88
  10. running_process-4.6.2/crates/running-process/src/broker/server/deadline_stream.rs +242 -0
  11. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/orchestrate_unix.rs +2 -1
  12. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/unix.rs +186 -4
  13. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/wire.rs +114 -14
  14. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff_serve.rs +9 -8
  15. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/mod.rs +2 -0
  16. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/observer_registry.rs +138 -19
  17. running_process-4.6.2/crates/running-process/src/helpers.rs +260 -0
  18. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/lib.rs +322 -83
  19. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/descendants_linux.rs +181 -9
  20. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/descendants_macos.rs +225 -46
  21. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/mod.rs +117 -3
  22. running_process-4.6.2/crates/running-process/src/observer/pid_identity.rs +18 -0
  23. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/tests.rs +57 -1
  24. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/backend.rs +6 -0
  25. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/native_pty_process.rs +77 -39
  26. running_process-4.6.2/crates/running-process/src/pty/pty_posix.rs +449 -0
  27. running_process-4.6.2/crates/running-process/src/public_symbols.rs +263 -0
  28. running_process-4.6.2/crates/running-process/src/spawn_imp_unix.rs +505 -0
  29. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/tests.rs +194 -1
  30. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/admin.rs +53 -3
  31. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/connection.rs +32 -3
  32. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_serve_e2e.rs +93 -9
  33. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_wire.rs +204 -16
  34. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/main.rs +25 -0
  35. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker_v2_scaffold_accepts_connection.rs +234 -0
  36. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/process_core_test.rs +93 -26
  37. running_process-4.6.2/crates/running-process/tests/pty_unix_teardown_test.rs +154 -0
  38. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/unsafe_inventory.rs +1 -1
  39. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/Cargo.toml +1 -1
  40. {running_process-4.6.1 → running_process-4.6.2}/pyproject.toml +1 -1
  41. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/__init__.py +1 -1
  42. running_process-4.6.1/crates/running-process/src/helpers.rs +0 -74
  43. running_process-4.6.1/crates/running-process/src/pty/pty_posix.rs +0 -121
  44. running_process-4.6.1/crates/running-process/src/public_symbols.rs +0 -90
  45. running_process-4.6.1/crates/running-process/src/spawn_imp_unix.rs +0 -267
  46. {running_process-4.6.1 → running_process-4.6.2}/LICENSE +0 -0
  47. {running_process-4.6.1 → running_process-4.6.2}/README.md +0 -0
  48. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/Cargo.toml +0 -0
  49. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/README.md +0 -0
  50. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/build.rs +0 -0
  51. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/examples/handoff_rollout_evidence.rs +0 -0
  52. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v1/broker_v1_admin.proto +0 -0
  53. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v1/broker_v1_envelope.proto +0 -0
  54. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v1/broker_v1_manifest.proto +0 -0
  55. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v1/broker_v1_service_def.proto +0 -0
  56. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v1/buf.yaml +0 -0
  57. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v2/broker_v2_control.proto +0 -0
  58. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v2/broker_v2_manifest.proto +0 -0
  59. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/broker_v2/broker_v2_service_def.proto +0 -0
  60. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/proto/daemon.proto +0 -0
  61. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/README.md +0 -0
  62. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/README.md +0 -0
  63. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/daemon.rs +0 -0
  64. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/running-process-broker-v1.rs +0 -0
  65. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/running-process-cleanup.rs +0 -0
  66. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/runpm.rs +0 -0
  67. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/bin/trampoline.rs +0 -0
  68. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/boot_autostart/linux.rs +0 -0
  69. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/boot_autostart/macos.rs +0 -0
  70. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/boot_autostart/mod.rs +0 -0
  71. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/boot_autostart/windows.rs +0 -0
  72. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/README.md +0 -0
  73. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/adopt.rs +0 -0
  74. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_handle.rs +0 -0
  75. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lib/accept_handed_off.rs +0 -0
  76. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lifecycle/identity.rs +0 -0
  77. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lifecycle/mod.rs +0 -0
  78. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lifecycle/probe.rs +0 -0
  79. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lifecycle/probe_async.rs +0 -0
  80. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_lifecycle/verify_pid.rs +0 -0
  81. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_sdk/frame_client.rs +0 -0
  82. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_sdk/frame_client_async.rs +0 -0
  83. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_sdk/identity_file.rs +0 -0
  84. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_sdk/mod.rs +0 -0
  85. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/backend_sdk/mux.rs +0 -0
  86. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/broker_http_port.rs +0 -0
  87. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/broker_http_server.rs +0 -0
  88. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/brokered_backend.rs +0 -0
  89. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/builders.rs +0 -0
  90. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/capabilities.rs +0 -0
  91. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/client.rs +0 -0
  92. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/client_v2.rs +0 -0
  93. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/doctor.rs +0 -0
  94. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/fs_health.rs +0 -0
  95. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/get_http_endpoint_dispatch.rs +0 -0
  96. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/host_identity.rs +0 -0
  97. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/http_endpoint_registry.rs +0 -0
  98. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/crash_dump.rs +0 -0
  99. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/mod.rs +0 -0
  100. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/names.rs +0 -0
  101. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/names_v2.rs +0 -0
  102. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/privilege.rs +0 -0
  103. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/process_tree.rs +0 -0
  104. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/lifecycle/sid.rs +0 -0
  105. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/manifest.rs +0 -0
  106. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/mod.rs +0 -0
  107. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol/frame_ext.rs +0 -0
  108. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol/framing.rs +0 -0
  109. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol/mod.rs +0 -0
  110. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol/registry.rs +0 -0
  111. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol/validate.rs +0 -0
  112. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/README.md +0 -0
  113. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/backend_handle.rs +0 -0
  114. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/client_compat.rs +0 -0
  115. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/io.rs +0 -0
  116. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/loader.rs +0 -0
  117. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/manifest_io.rs +0 -0
  118. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/protocol_v2/mod.rs +0 -0
  119. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/secure_dir.rs +0 -0
  120. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/backend_endpoint_allocator.rs +0 -0
  121. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/backend_launcher.rs +0 -0
  122. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/backend_registry.rs +0 -0
  123. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/broadcast.rs +0 -0
  124. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/fd_pressure.rs +0 -0
  125. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/ack.rs +0 -0
  126. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/fallback.rs +0 -0
  127. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/handoff_token.rs +0 -0
  128. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/latency.rs +0 -0
  129. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/mod.rs +0 -0
  130. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/orchestrate.rs +0 -0
  131. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/pending.rs +0 -0
  132. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/handoff/windows.rs +0 -0
  133. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/hello_handler.rs +0 -0
  134. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/hello_router.rs +0 -0
  135. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/idle_coord.rs +0 -0
  136. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/instance.rs +0 -0
  137. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/metrics.rs +0 -0
  138. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/perf_guard.rs +0 -0
  139. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/recovery.rs +0 -0
  140. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/serve.rs +0 -0
  141. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/service_def_loader.rs +0 -0
  142. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/spawn_coordinator.rs +0 -0
  143. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/spawn_wait.rs +0 -0
  144. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/trace_context.rs +0 -0
  145. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/broker/server/version_allow_list.rs +0 -0
  146. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/instances.rs +0 -0
  147. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/list.rs +0 -0
  148. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/mod.rs +0 -0
  149. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/prune.rs +0 -0
  150. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/uninstall.rs +0 -0
  151. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/verify_artifacts.rs +0 -0
  152. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/cleanup/verify_basic.rs +0 -0
  153. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/client.rs +0 -0
  154. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/deadline_io.rs +0 -0
  155. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/mod.rs +0 -0
  156. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/observer.rs +0 -0
  157. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/paths.rs +0 -0
  158. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/pipe_session.rs +0 -0
  159. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/pty_session.rs +0 -0
  160. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/client/telemetry.rs +0 -0
  161. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/console_detect.rs +0 -0
  162. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/containment.rs +0 -0
  163. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/attach_stream.rs +0 -0
  164. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/config.rs +0 -0
  165. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/emergency_reserve.rs +0 -0
  166. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/core.rs +0 -0
  167. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/kill.rs +0 -0
  168. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/maintenance.rs +0 -0
  169. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/mod.rs +0 -0
  170. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/observer.rs +0 -0
  171. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/pipe_sessions_handlers.rs +0 -0
  172. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/process_tree.rs +0 -0
  173. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/pty_sessions_handlers.rs +0 -0
  174. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/registry_handlers.rs +0 -0
  175. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/services.rs +0 -0
  176. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/spawn.rs +0 -0
  177. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/telemetry.rs +0 -0
  178. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers/util.rs +0 -0
  179. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/handlers_tests.rs +0 -0
  180. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/idle.rs +0 -0
  181. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/mod.rs +0 -0
  182. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/pipe_attach_stream.rs +0 -0
  183. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/pipe_sessions.rs +0 -0
  184. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/platform/mod.rs +0 -0
  185. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/platform/unix.rs +0 -0
  186. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/platform/windows.rs +0 -0
  187. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/pty_sessions.rs +0 -0
  188. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/reaper.rs +0 -0
  189. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/registry.rs +0 -0
  190. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/runtime_gc.rs +0 -0
  191. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/server.rs +0 -0
  192. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/services.rs +0 -0
  193. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/services_snapshot.rs +0 -0
  194. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/shadow.rs +0 -0
  195. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/daemon/telemetry.rs +0 -0
  196. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/environment.rs +0 -0
  197. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/maintenance/mod.rs +0 -0
  198. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/maintenance/release_handles.rs +0 -0
  199. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/cmdline.rs +0 -0
  200. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/observer/file_handles.rs +0 -0
  201. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/originator.rs +0 -0
  202. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/process_tree.rs +0 -0
  203. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/child.rs +0 -0
  204. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/conpty_acquire.rs +0 -0
  205. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/conpty_api.rs +0 -0
  206. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/conpty_sidecar_hashes.rs +0 -0
  207. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/mod.rs +0 -0
  208. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/pipes.rs +0 -0
  209. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/proc_thread_attr.rs +0 -0
  210. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/pseudoconsole.rs +0 -0
  211. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/conpty_passthrough/win_version.rs +0 -0
  212. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/mod.rs +0 -0
  213. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/pty_windows.rs +0 -0
  214. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/pty/terminal_input.rs +0 -0
  215. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/runpm_config.rs +0 -0
  216. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/rust_debug.rs +0 -0
  217. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/spawn.rs +0 -0
  218. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/spawn_imp_windows.rs +0 -0
  219. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/systemd_killmode.rs +0 -0
  220. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/terminal_graphics.rs +0 -0
  221. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/test_support/conformance.rs +0 -0
  222. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/test_support/mod.rs +0 -0
  223. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/types.rs +0 -0
  224. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/unix.rs +0 -0
  225. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/src/windows.rs +0 -0
  226. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/README.md +0 -0
  227. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_endpoint_allocator.rs +0 -0
  228. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_handle_boot_id.rs +0 -0
  229. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_handle_common.rs +0 -0
  230. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_handle_dead.rs +0 -0
  231. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_handle_probe.rs +0 -0
  232. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_handle_recycled.rs +0 -0
  233. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_registry.rs +0 -0
  234. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_sdk.rs +0 -0
  235. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/backend_sdk_async.rs +0 -0
  236. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/broadcast_release_handles.rs +0 -0
  237. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/builders.rs +0 -0
  238. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/client.rs +0 -0
  239. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/conformance_kit.rs +0 -0
  240. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/contrib_templates.rs +0 -0
  241. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/docs_escape_hatch.rs +0 -0
  242. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/docs_index.rs +0 -0
  243. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/doctor.rs +0 -0
  244. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/fd_pressure.rs +0 -0
  245. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/framing.rs +0 -0
  246. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/golden_bytes.rs +0 -0
  247. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_ack_deadline.rs +0 -0
  248. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_adopted_backend.rs +0 -0
  249. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_adoption.rs +0 -0
  250. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_backend_lib.rs +0 -0
  251. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_capability.rs +0 -0
  252. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_cross_os_acceptance.rs +0 -0
  253. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_end_to_end_acceptance.rs +0 -0
  254. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_fallback_perm_denied.rs +0 -0
  255. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_latency.rs +0 -0
  256. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_latency_e2e.rs +0 -0
  257. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_orchestrate.rs +0 -0
  258. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_serve_latency.rs +0 -0
  259. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_token_mismatch.rs +0 -0
  260. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_transport.rs +0 -0
  261. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_under_load.rs +0 -0
  262. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_unix_e2e_orchestrate.rs +0 -0
  263. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_unix_orchestrate.rs +0 -0
  264. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_windows_duplicate_handle.rs +0 -0
  265. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/handoff_windows_orchestrate.rs +0 -0
  266. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_concurrent.rs +0 -0
  267. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_handler.rs +0 -0
  268. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_rate_limit.rs +0 -0
  269. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_router.rs +0 -0
  270. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_service_unknown.rs +0 -0
  271. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_skip.rs +0 -0
  272. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/hello_version_blocked.rs +0 -0
  273. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/idle_coord.rs +0 -0
  274. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/instance.rs +0 -0
  275. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/instance_isolation.rs +0 -0
  276. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/into_backend_io.rs +0 -0
  277. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/lifecycle_event_size.rs +0 -0
  278. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/manifest_atomic.rs +0 -0
  279. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/manifest_boot_id.rs +0 -0
  280. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/manifest_corruption.rs +0 -0
  281. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/manifest_roundtrip.rs +0 -0
  282. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/metrics_names_frozen.rs +0 -0
  283. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/names.rs +0 -0
  284. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/peer_creds_drop.rs +0 -0
  285. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/perf_guard.rs +0 -0
  286. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/process_tree_lifecycle.rs +0 -0
  287. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/proto_field_numbers.rs +0 -0
  288. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/proto_roundtrip.rs +0 -0
  289. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/recovery_one_retry.rs +0 -0
  290. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/serve.rs +0 -0
  291. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/service_def_loader.rs +0 -0
  292. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/servicedef_cli.rs +0 -0
  293. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/socket_common.rs +0 -0
  294. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/spawn_coordinator.rs +0 -0
  295. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/spawn_wait.rs +0 -0
  296. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/toy_three_party.rs +0 -0
  297. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/trace_propagation.rs +0 -0
  298. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/verify_pid/linux.rs +0 -0
  299. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/verify_pid/macos.rs +0 -0
  300. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/verify_pid/mod.rs +0 -0
  301. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/broker/verify_pid/windows.rs +0 -0
  302. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/brokered_backend_ui.rs +0 -0
  303. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/cleanup_list.rs +0 -0
  304. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/cleanup_prune_confirm.rs +0 -0
  305. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/cleanup_prune_dryrun.rs +0 -0
  306. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/cleanup_uninstall.rs +0 -0
  307. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/cleanup_verify_artifacts.rs +0 -0
  308. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/common.rs +0 -0
  309. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/cleanup/main.rs +0 -0
  310. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/common/mitm_stdin.rs +0 -0
  311. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/common/mod.rs +0 -0
  312. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/containment_test.rs +0 -0
  313. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_autostart_test.rs +0 -0
  314. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_backlog_accumulation_test.rs +0 -0
  315. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_cross_process_pty_attach_test.rs +0 -0
  316. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_fast_ctrl_c_handoff_test.rs +0 -0
  317. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_integration/compiler_wrap_seam_test.rs +0 -0
  318. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_integration/env_replace_test.rs +0 -0
  319. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_integration/main.rs +0 -0
  320. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_integration/more_tests.rs +0 -0
  321. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_integration/stdout_seam_test.rs +0 -0
  322. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_non_tty_attach_test.rs +0 -0
  323. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_pipe_session_attach_test.rs +0 -0
  324. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_pty_session_attach_test.rs +0 -0
  325. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_resize_rpc_test.rs +0 -0
  326. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_runpm_save_resurrect.rs +0 -0
  327. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_runpm_service_stubs.rs +0 -0
  328. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_sessions_bulk_ops_test.rs +0 -0
  329. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_sessions_log_test.rs +0 -0
  330. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_tee_ring_test.rs +0 -0
  331. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_termination_outcome_test.rs +0 -0
  332. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_tree_kill_test.rs +0 -0
  333. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/daemon_tui_repaint_test.rs +0 -0
  334. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/fs_adversarial_test.rs +0 -0
  335. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/interactive_pty_session_test.rs +0 -0
  336. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/maintenance/main.rs +0 -0
  337. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/maintenance/release_handles_unix.rs +0 -0
  338. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/maintenance/release_handles_windows.rs +0 -0
  339. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/originator_test.rs +0 -0
  340. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/pty_conhost_job_test.rs +0 -0
  341. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/pty_master_public_api_test.rs +0 -0
  342. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/pty_mitm_paste_test.rs +0 -0
  343. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/pty_mitm_stdin_test.rs +0 -0
  344. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/runpm_boot_autostart_fixtures.rs +0 -0
  345. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/runpm_toml_config.rs +0 -0
  346. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/cross_user_release_handles.rs +0 -0
  347. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/cve_dbus_2014_3639.rs +0 -0
  348. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/cve_dbus_2023_34969.rs +0 -0
  349. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/cve_sccache_2023_1521.rs +0 -0
  350. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/deferred_runtime_surfaces.rs +0 -0
  351. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/dependency_surface.rs +0 -0
  352. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/fuzz_campaign_signoff.rs +0 -0
  353. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/main.rs +0 -0
  354. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/manifest_tamper_detection.rs +0 -0
  355. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/no_network_dependencies.rs +0 -0
  356. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/pipe_name_validation.rs +0 -0
  357. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/pipe_squatting.rs +0 -0
  358. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/security_audit_workflow.rs +0 -0
  359. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/security_fuzz_workflow.rs +0 -0
  360. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/service_name_validation.rs +0 -0
  361. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/wanted_version_shell_injection.rs +0 -0
  362. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/security/wanted_version_traversal.rs +0 -0
  363. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/spawn_test.rs +0 -0
  364. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/terminal_graphics_capabilities_test.rs +0 -0
  365. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/ui/brokered_backend_state_in_bind.rs +0 -0
  366. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process/tests/ui/brokered_backend_state_in_bind.stderr +0 -0
  367. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/containment.rs +0 -0
  368. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/daemon_client.rs +0 -0
  369. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/debug_traces.rs +0 -0
  370. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/helpers.rs +0 -0
  371. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/idle_detector.rs +0 -0
  372. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/lib.rs +0 -0
  373. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/metrics.rs +0 -0
  374. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/originator.rs +0 -0
  375. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/pid_tracking.rs +0 -0
  376. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/priority.rs +0 -0
  377. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/process.rs +0 -0
  378. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/process_tree.rs +0 -0
  379. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/pty_buffer.rs +0 -0
  380. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/pty_process.rs +0 -0
  381. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/public_symbols.rs +0 -0
  382. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/py_native_process.rs +0 -0
  383. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/registry.rs +0 -0
  384. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/signal_bool.rs +0 -0
  385. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/terminal_input.rs +0 -0
  386. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/control_churn.rs +0 -0
  387. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/expect_match.rs +0 -0
  388. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/idle_detector.rs +0 -0
  389. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/mod.rs +0 -0
  390. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/parse_command.rs +0 -0
  391. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/process_tree.rs +0 -0
  392. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/pty_buffer.rs +0 -0
  393. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/pty_process.rs +0 -0
  394. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/registry.rs +0 -0
  395. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/signal_bool.rs +0 -0
  396. {running_process-4.6.1 → running_process-4.6.2}/crates/running-process-py/src/tests/terminal_input.rs +0 -0
  397. {running_process-4.6.1 → running_process-4.6.2}/crates/test-watchdog/Cargo.toml +0 -0
  398. {running_process-4.6.1 → running_process-4.6.2}/crates/test-watchdog/src/lib.rs +0 -0
  399. {running_process-4.6.1 → running_process-4.6.2}/crates/test-watchdog/tests/hang_dump.rs +0 -0
  400. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/assets/example.txt +0 -0
  401. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/cli.py +0 -0
  402. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/command_render.py +0 -0
  403. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/compat.py +0 -0
  404. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/console_encoding.py +0 -0
  405. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/daemon.py +0 -0
  406. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/dashboard.py +0 -0
  407. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/exit_status.py +0 -0
  408. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/expect.py +0 -0
  409. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/interrupt_handler.py +0 -0
  410. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/launch.py +0 -0
  411. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/line_iterator.py +0 -0
  412. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/output_formatter.py +0 -0
  413. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/priority.py +0 -0
  414. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/process_utils.py +0 -0
  415. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/processor_cli.py +0 -0
  416. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/__init__.py +0 -0
  417. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_command.py +0 -0
  418. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_console_io.py +0 -0
  419. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_errors.py +0 -0
  420. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_idle_helpers.py +0 -0
  421. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_idle_state.py +0 -0
  422. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_interactive.py +0 -0
  423. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_process_helpers.py +0 -0
  424. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pseudo_terminal.py +0 -0
  425. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pty_expect.py +0 -0
  426. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pty_idle_waiter.py +0 -0
  427. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pty_input_relay.py +0 -0
  428. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pty_reader.py +0 -0
  429. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_pty_wait_for.py +0 -0
  430. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_terminal_strip.py +0 -0
  431. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_types.py +0 -0
  432. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/pty/_wait_input.py +0 -0
  433. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/__init__.py +0 -0
  434. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_classmethod_api.py +0 -0
  435. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_core.py +0 -0
  436. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_helpers.py +0 -0
  437. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_iter.py +0 -0
  438. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_subprocess.py +0 -0
  439. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_types.py +0 -0
  440. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process/_wait_methods.py +0 -0
  441. {running_process-4.6.1 → running_process-4.6.2}/src/running_process/running_process_manager.py +0 -0
@@ -1351,7 +1351,7 @@ dependencies = [
1351
1351
 
1352
1352
  [[package]]
1353
1353
  name = "running-process"
1354
- version = "4.6.1"
1354
+ version = "4.6.2"
1355
1355
  dependencies = [
1356
1356
  "anyhow",
1357
1357
  "blake3",
@@ -1390,31 +1390,32 @@ dependencies = [
1390
1390
 
1391
1391
  [[package]]
1392
1392
  name = "running-process-observer"
1393
- version = "4.6.1"
1393
+ version = "4.6.2"
1394
1394
  dependencies = [
1395
1395
  "blake3",
1396
1396
  "dirs",
1397
+ "libc",
1397
1398
  "tempfile",
1398
1399
  "windows-sys 0.59.0",
1399
1400
  ]
1400
1401
 
1401
1402
  [[package]]
1402
1403
  name = "running-process-observer-interposer-linux"
1403
- version = "4.6.1"
1404
+ version = "4.6.2"
1404
1405
  dependencies = [
1405
1406
  "libc",
1406
1407
  ]
1407
1408
 
1408
1409
  [[package]]
1409
1410
  name = "running-process-observer-interposer-macos"
1410
- version = "4.6.1"
1411
+ version = "4.6.2"
1411
1412
  dependencies = [
1412
1413
  "libc",
1413
1414
  ]
1414
1415
 
1415
1416
  [[package]]
1416
1417
  name = "running-process-observer-interposer-windows"
1417
- version = "4.6.1"
1418
+ version = "4.6.2"
1418
1419
  dependencies = [
1419
1420
  "retour",
1420
1421
  "windows-sys 0.59.0",
@@ -1422,7 +1423,7 @@ dependencies = [
1422
1423
 
1423
1424
  [[package]]
1424
1425
  name = "running-process-py"
1425
- version = "4.6.1"
1426
+ version = "4.6.2"
1426
1427
  dependencies = [
1427
1428
  "interprocess",
1428
1429
  "libc",
@@ -1436,7 +1437,7 @@ dependencies = [
1436
1437
 
1437
1438
  [[package]]
1438
1439
  name = "running-process-win-gnu-bridge"
1439
- version = "4.6.1"
1440
+ version = "4.6.2"
1440
1441
  dependencies = [
1441
1442
  "windows-sys 0.59.0",
1442
1443
  ]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/running-process", "crates/running-process-py", "crates/test-watchdog"]
4
4
 
5
5
  [workspace.package]
6
- version = "4.6.1"
6
+ version = "4.6.2"
7
7
  edition = "2021"
8
8
  rust-version = "1.85"
9
9
  license = "BSD-3-Clause"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: running_process
3
- Version: 4.6.1
3
+ Version: 4.6.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
@@ -45,7 +45,7 @@ use std::sync::Arc;
45
45
  use std::sync::atomic::{AtomicUsize, Ordering};
46
46
  use std::thread;
47
47
 
48
- use interprocess::local_socket::traits::Listener as _;
48
+ use interprocess::local_socket::traits::{Listener as _, Stream as _};
49
49
  use interprocess::local_socket::ListenerOptions;
50
50
  use prost::Message;
51
51
  use running_process::broker::lifecycle::names_v2::v2_program_pipe;
@@ -57,6 +57,7 @@ use running_process::broker::protocol::{
57
57
  };
58
58
  use running_process::broker::protocol_v2::ServiceDefinitionLoader;
59
59
  use running_process::broker::server::service_def_loader::ServiceDefinitionError;
60
+ use running_process::broker::server::deadline_stream::{hello_read_deadline, DeadlineStream};
60
61
 
61
62
  /// Default program name when `--program` is not passed. Matches the
62
63
  /// slice-3c scaffold so existing integration tests keep working.
@@ -66,6 +67,23 @@ const SCAFFOLD_PIPE_IDX: u32 = 0;
66
67
  /// Maximum in-flight Hello handlers. Conservative cap; the OS thread
67
68
  /// cap is the hard upper bound but we want backpressure before that.
68
69
  const MAX_INFLIGHT_HANDLERS: usize = 256;
70
+ const MAX_INFLIGHT_HANDLERS_ENV: &str = "RUNNING_PROCESS_BROKER_MAX_INFLIGHT_HANDLERS";
71
+
72
+ fn max_inflight_handlers() -> usize {
73
+ std::env::var(MAX_INFLIGHT_HANDLERS_ENV)
74
+ .ok()
75
+ .and_then(|raw| raw.trim().parse::<usize>().ok())
76
+ .filter(|&limit| limit > 0)
77
+ .unwrap_or(MAX_INFLIGHT_HANDLERS)
78
+ }
79
+
80
+ struct InflightGuard(Arc<AtomicUsize>);
81
+
82
+ impl Drop for InflightGuard {
83
+ fn drop(&mut self) {
84
+ self.0.fetch_sub(1, Ordering::SeqCst);
85
+ }
86
+ }
69
87
 
70
88
  #[derive(Debug, Clone)]
71
89
  struct CliOptions {
@@ -254,6 +272,7 @@ fn accept_loop(
254
272
  loader: Arc<ServiceDefinitionLoader>,
255
273
  inflight: Arc<AtomicUsize>,
256
274
  ) -> ExitCode {
275
+ let max_inflight = max_inflight_handlers();
257
276
  loop {
258
277
  match listener.accept() {
259
278
  Ok(stream) => {
@@ -261,10 +280,10 @@ fn accept_loop(
261
280
  // The peer's blocking read on the Hello-reply socket will
262
281
  // see EOF when this branch closes the stream.
263
282
  let n = inflight.fetch_add(1, Ordering::SeqCst);
264
- if n >= MAX_INFLIGHT_HANDLERS {
283
+ if n >= max_inflight {
265
284
  inflight.fetch_sub(1, Ordering::SeqCst);
266
285
  eprintln!(
267
- "running-process-broker-v2: at MAX_INFLIGHT_HANDLERS ({MAX_INFLIGHT_HANDLERS}); dropping connection",
286
+ "running-process-broker-v2: at MAX_INFLIGHT_HANDLERS ({max_inflight}); dropping connection",
268
287
  );
269
288
  drop(stream);
270
289
  continue;
@@ -274,8 +293,9 @@ fn accept_loop(
274
293
  let spawn_result = thread::Builder::new()
275
294
  .name("rpb-v2-handler".to_string())
276
295
  .spawn(move || {
296
+ let _inflight_guard = InflightGuard(inflight_handler);
277
297
  let mut s = stream;
278
- let result = handle_hello(&mut s, &loader);
298
+ let result = handle_hello_with_deadline(&mut s, &loader);
279
299
  match result {
280
300
  Ok(svc) => println!(
281
301
  "running-process-broker-v2 Hello service={svc:?} negotiated",
@@ -284,7 +304,6 @@ fn accept_loop(
284
304
  "running-process-broker-v2 Hello handler failed: {err}"
285
305
  ),
286
306
  }
287
- inflight_handler.fetch_sub(1, Ordering::SeqCst);
288
307
  });
289
308
  if let Err(err) = spawn_result {
290
309
  eprintln!(
@@ -314,7 +333,7 @@ fn accept_one(
314
333
  match listener.accept() {
315
334
  Ok(mut stream) => {
316
335
  println!("running-process-broker-v2 peer connected (--once)");
317
- match handle_hello(&mut stream, &loader) {
336
+ match handle_hello_with_deadline(&mut stream, &loader) {
318
337
  Ok(svc) => {
319
338
  println!(
320
339
  "running-process-broker-v2 Hello for service {svc:?} negotiated; exiting"
@@ -334,17 +353,36 @@ fn accept_one(
334
353
  }
335
354
  }
336
355
 
356
+ fn handle_hello_with_deadline(
357
+ stream: &mut interprocess::local_socket::Stream,
358
+ loader: &ServiceDefinitionLoader,
359
+ ) -> Result<String, String> {
360
+ stream
361
+ .set_nonblocking(true)
362
+ .map_err(|error| format!("set Hello stream nonblocking: {error}"))?;
363
+ let read_result = {
364
+ let mut deadline_stream = DeadlineStream::new(stream, hello_read_deadline());
365
+ read_frame(&mut deadline_stream).map_err(|error| format!("read Hello frame: {error}"))
366
+ };
367
+ let restore_result = stream
368
+ .set_nonblocking(false)
369
+ .map_err(|error| format!("restore Hello stream blocking mode: {error}"));
370
+ let bytes = read_result?;
371
+ restore_result?;
372
+ handle_hello_bytes(stream, loader, bytes)
373
+ }
374
+
337
375
  /// Read a `Hello` frame, look up the registered service, and send
338
376
  /// back either `Negotiated` (service found + version policy OK) or
339
377
  /// `Refused` (unknown service or policy block).
340
378
  ///
341
379
  /// Returns the service name on Negotiated, or the human-readable
342
380
  /// refusal reason on Refused. Wire errors propagate as `Err`.
343
- fn handle_hello<S: std::io::Read + std::io::Write>(
381
+ fn handle_hello_bytes<S: std::io::Write>(
344
382
  stream: &mut S,
345
383
  loader: &ServiceDefinitionLoader,
384
+ bytes: Vec<u8>,
346
385
  ) -> Result<String, String> {
347
- let bytes = read_frame(stream).map_err(|e| format!("read Hello frame: {e}"))?;
348
386
  let hello = Hello::decode(bytes.as_slice()).map_err(|e| format!("decode Hello: {e}"))?;
349
387
 
350
388
  let reply = build_hello_reply(&hello, loader);
@@ -17,7 +17,9 @@ pub use accept_handed_off::{
17
17
  accept_handed_off, parse_handoff_token, AcceptedHandoff, HandedOffPayload, HandoffAcceptance,
18
18
  HandoffRejectionReason, RejectedHandoff,
19
19
  };
20
+ #[allow(deprecated)]
20
21
  pub use wire::{
21
- read_handoff_offer, respond_to_handoff_offer, serve_handoff_offer, write_handoff_ack,
22
+ read_handoff_offer, read_handoff_offer_with_deadline, respond_to_handoff_offer,
23
+ serve_handoff_offer, serve_handoff_offer_with_deadline, write_handoff_ack,
22
24
  BackendHandoffWireError,
23
25
  };
@@ -27,6 +27,7 @@ use crate::broker::backend_lib::accept_handed_off::{
27
27
  use crate::broker::protocol::{
28
28
  read_frame, write_frame, Frame, FrameKind, FramingError, HandoffAck, HandoffOffer,
29
29
  };
30
+ use crate::broker::server::deadline_stream::with_nonblocking_deadline;
30
31
  use crate::broker::server::handoff::wire::{handoff_ack_frame, validate_handoff_frame};
31
32
  use crate::broker::server::{HandoffToken, HandoffTokenStore};
32
33
 
@@ -47,6 +48,12 @@ pub enum BackendHandoffWireError {
47
48
  UnexpectedFrame(&'static str),
48
49
  }
49
50
 
51
+ impl From<std::io::Error> for BackendHandoffWireError {
52
+ fn from(error: std::io::Error) -> Self {
53
+ Self::Framing(FramingError::Io(error))
54
+ }
55
+ }
56
+
50
57
  /// Read and validate one broker→backend [`HandoffOffer`] frame.
51
58
  pub fn read_handoff_offer<S: Read>(
52
59
  stream: &mut S,
@@ -65,6 +72,15 @@ pub fn read_handoff_offer<S: Read>(
65
72
  Ok(offer)
66
73
  }
67
74
 
75
+ /// Read one broker→backend [`HandoffOffer`] from a production local socket
76
+ /// with an absolute deadline, restoring blocking mode before returning.
77
+ pub fn read_handoff_offer_with_deadline(
78
+ stream: &mut interprocess::local_socket::Stream,
79
+ deadline: Instant,
80
+ ) -> Result<HandoffOffer, BackendHandoffWireError> {
81
+ with_nonblocking_deadline(stream, deadline, |stream| read_handoff_offer(stream))
82
+ }
83
+
68
84
  /// Validate/consume one received offer and write the matching [`HandoffAck`].
69
85
  ///
70
86
  /// The presented token rides the offer; `expected_token` is the token the
@@ -121,13 +137,57 @@ pub fn write_handoff_ack<S: Write>(
121
137
  ///
122
138
  /// Convenience composition of [`read_handoff_offer`] and
123
139
  /// [`respond_to_handoff_offer`] for backends serving one handoff per
124
- /// control exchange.
140
+ /// control exchange. This legacy generic entry point cannot configure bounded
141
+ /// I/O itself; callers must pre-bound custom streams. Production local-socket
142
+ /// users should call [`serve_handoff_offer_with_deadline`] instead.
143
+ #[deprecated(
144
+ since = "4.6.2",
145
+ note = "use serve_handoff_offer_with_deadline for production local sockets"
146
+ )]
125
147
  pub fn serve_handoff_offer<S: Read + Write>(
126
148
  stream: &mut S,
127
149
  pending_tokens: &mut HandoffTokenStore,
128
150
  expected_token: HandoffToken,
129
151
  now: Instant,
152
+ ) -> Result<HandoffAcceptance<HandoffOffer>, BackendHandoffWireError> {
153
+ serve_handoff_offer_inner(stream, pending_tokens, expected_token, now)
154
+ }
155
+
156
+ fn serve_handoff_offer_inner<S: Read + Write>(
157
+ stream: &mut S,
158
+ pending_tokens: &mut HandoffTokenStore,
159
+ expected_token: HandoffToken,
160
+ now: Instant,
130
161
  ) -> Result<HandoffAcceptance<HandoffOffer>, BackendHandoffWireError> {
131
162
  let offer = read_handoff_offer(stream)?;
132
163
  respond_to_handoff_offer(stream, pending_tokens, expected_token, offer, now)
133
164
  }
165
+
166
+ /// Serve one handoff offer over a production local socket with an absolute
167
+ /// read deadline.
168
+ ///
169
+ /// The stream is temporarily switched to nonblocking mode so silent, partial,
170
+ /// and continuously trickling peers cannot extend the bound. Blocking mode is
171
+ /// restored before the token is consumed and the ACK is written. If both the
172
+ /// read and mode restoration fail, the read error takes precedence so a timeout
173
+ /// remains classified as [`FramingError::Io`] with
174
+ /// [`std::io::ErrorKind::TimedOut`].
175
+ ///
176
+ /// This wire helper does not receive or acquire an out-of-band descriptor.
177
+ /// A consuming transport that receives an `SCM_RIGHTS` descriptor before
178
+ /// calling this function must retain it in an owned RAII value and drop it when
179
+ /// this function returns an error, including a deadline expiry.
180
+ ///
181
+ /// The deprecated [`serve_handoff_offer`] remains available for compatibility
182
+ /// with custom `Read + Write` streams whose bounded-I/O policy is configured by
183
+ /// the caller.
184
+ pub fn serve_handoff_offer_with_deadline(
185
+ stream: &mut interprocess::local_socket::Stream,
186
+ pending_tokens: &mut HandoffTokenStore,
187
+ expected_token: HandoffToken,
188
+ now: Instant,
189
+ deadline: Instant,
190
+ ) -> Result<HandoffAcceptance<HandoffOffer>, BackendHandoffWireError> {
191
+ let offer = read_handoff_offer_with_deadline(stream, deadline)?;
192
+ respond_to_handoff_offer(stream, pending_tokens, expected_token, offer, now)
193
+ }
@@ -16,6 +16,7 @@ use crate::broker::protocol::{
16
16
 
17
17
  use super::backend_registry::BackendRegistry;
18
18
  use super::connection::{bind_local_socket, BrokerConnectionError, LocalSocketCleanup};
19
+ use super::deadline_stream::{hello_read_deadline, with_nonblocking_deadline};
19
20
  use super::service_def_loader::{service_definition_dir, SERVICE_DEF_DIR_ENV};
20
21
  use super::spawn_coordinator::{
21
22
  SpawnBudgetSnapshot, DEFAULT_SPAWN_ATTEMPTS_PER_WINDOW, DEFAULT_SPAWN_BUDGET_WINDOW,
@@ -559,7 +560,9 @@ pub fn serve_one_admin_socket(
559
560
  let cleanup = LocalSocketCleanup(socket_path);
560
561
  let result = (|| {
561
562
  let mut stream = listener.accept()?;
562
- handle_admin_connection(&mut stream, snapshot)
563
+ with_nonblocking_deadline(&mut stream, hello_read_deadline(), |stream| {
564
+ handle_admin_connection(stream, snapshot)
565
+ })
563
566
  })();
564
567
  drop(listener);
565
568
  drop(cleanup);
@@ -18,6 +18,7 @@ use crate::broker::protocol::{
18
18
  FrameKind, FramingError, HelloReply, PayloadEncoding, Refused, CONTROL_PAYLOAD_PROTOCOL,
19
19
  MAX_HELLO_BYTES, PROTOCOL_VERSION,
20
20
  };
21
+ use crate::broker::server::deadline_stream::{hello_read_deadline, with_nonblocking_deadline};
21
22
  use crate::broker::server::{HelloHandler, HelloRouter, PeerIdentity};
22
23
 
23
24
  /// Peer credential policy applied before reading a Hello frame.
@@ -212,7 +213,9 @@ where
212
213
  let result = (|| {
213
214
  let mut stream = listener.accept()?;
214
215
  let peer = peer_identity_from_stream(&stream)?;
215
- handle_hello_connection_with_peer_policy(&mut stream, responder, peer, peer_policy)
216
+ with_nonblocking_deadline(&mut stream, hello_read_deadline(), |stream| {
217
+ handle_hello_connection_with_peer_policy(stream, responder, peer, peer_policy)
218
+ })
216
219
  })();
217
220
  drop(listener);
218
221
  drop(cleanup);
@@ -260,13 +263,15 @@ pub fn serve_local_socket_connections_with_peer_policy(
260
263
  let handler = Arc::clone(&handler);
261
264
  let peer_policy = Arc::clone(&peer_policy);
262
265
  workers.push(thread::spawn(move || {
263
- handle_hello_connection_with_peer_policy(
264
- &mut stream,
265
- handler.as_ref(),
266
- peer,
267
- peer_policy.as_ref(),
268
- )
269
- .map(|_| ())
266
+ with_nonblocking_deadline(&mut stream, hello_read_deadline(), |stream| {
267
+ handle_hello_connection_with_peer_policy(
268
+ stream,
269
+ handler.as_ref(),
270
+ peer,
271
+ peer_policy.as_ref(),
272
+ )
273
+ .map(|_| ())
274
+ })
270
275
  }));
271
276
  }
272
277
 
@@ -325,12 +330,9 @@ where
325
330
  for _ in 0..connection_count {
326
331
  let mut stream = listener.accept()?;
327
332
  let peer = peer_identity_from_stream(&stream)?;
328
- let _ = handle_hello_connection_with_peer_policy(
329
- &mut stream,
330
- responder,
331
- peer,
332
- peer_policy,
333
- )?;
333
+ let _ = with_nonblocking_deadline(&mut stream, hello_read_deadline(), |stream| {
334
+ handle_hello_connection_with_peer_policy(stream, responder, peer, peer_policy)
335
+ })?;
334
336
  }
335
337
  Ok(())
336
338
  })();
@@ -21,97 +21,10 @@ use super::connection::{
21
21
  write_response_frame, BrokerConnectionError, HelloResponder, LocalSocketCleanup,
22
22
  PeerCredentialPolicy,
23
23
  };
24
+ use super::deadline_stream::{hello_read_deadline, DeadlineStream};
24
25
  use super::fd_pressure::{FdPressureDecision, FdPressureGuard};
25
26
  use super::hello_handler::PeerIdentity;
26
27
 
27
- /// Poll interval for the deadline-bounded control-socket read/write.
28
- const CONTROL_IO_POLL_INTERVAL: std::time::Duration = std::time::Duration::from_millis(5);
29
-
30
- /// Default deadline for reading a peer's initial Hello/admin frame off an
31
- /// accepted control-socket connection (issue #590, cluster G). The accept
32
- /// loop serves each connection inline on one thread, so a peer that
33
- /// connects but never sends a complete frame would otherwise stall every
34
- /// other client. Override with `RUNNING_PROCESS_BROKER_HELLO_TIMEOUT_MS`.
35
- const DEFAULT_HELLO_READ_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(30);
36
- const HELLO_READ_TIMEOUT_ENV: &str = "RUNNING_PROCESS_BROKER_HELLO_TIMEOUT_MS";
37
-
38
- fn hello_read_deadline() -> std::time::Instant {
39
- let timeout = std::env::var(HELLO_READ_TIMEOUT_ENV)
40
- .ok()
41
- .and_then(|raw| raw.trim().parse::<u64>().ok())
42
- .filter(|&ms| ms > 0)
43
- .map(std::time::Duration::from_millis)
44
- .unwrap_or(DEFAULT_HELLO_READ_TIMEOUT);
45
- std::time::Instant::now() + timeout
46
- }
47
-
48
- /// Wraps an accepted (nonblocking) control-socket stream and bounds every
49
- /// read/write against a deadline, so a silent or trickle peer cannot wedge
50
- /// the single-threaded accept loop (issue #590, cluster G). `Ok(0)` is
51
- /// treated as "no data yet" (Windows `PIPE_NOWAIT` returns that instead of
52
- /// `WouldBlock`), matching the broker probe idiom.
53
- struct DeadlineStream<'a, S> {
54
- inner: &'a mut S,
55
- deadline: std::time::Instant,
56
- }
57
-
58
- impl<'a, S> DeadlineStream<'a, S> {
59
- fn new(inner: &'a mut S, deadline: std::time::Instant) -> Self {
60
- Self { inner, deadline }
61
- }
62
-
63
- fn wait(&self) -> std::io::Result<()> {
64
- let now = std::time::Instant::now();
65
- if now >= self.deadline {
66
- return Err(std::io::Error::new(
67
- std::io::ErrorKind::TimedOut,
68
- "broker control-socket peer did not send a complete frame in time",
69
- ));
70
- }
71
- std::thread::sleep((self.deadline - now).min(CONTROL_IO_POLL_INTERVAL));
72
- Ok(())
73
- }
74
- }
75
-
76
- impl<S: Read> Read for DeadlineStream<'_, S> {
77
- fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
78
- loop {
79
- match self.inner.read(buf) {
80
- Ok(0) => self.wait()?,
81
- Ok(n) => return Ok(n),
82
- Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => self.wait()?,
83
- Err(e) if e.kind() == std::io::ErrorKind::Interrupted => continue,
84
- Err(e) => return Err(e),
85
- }
86
- }
87
- }
88
- }
89
-
90
- impl<S: Write> Write for DeadlineStream<'_, S> {
91
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
92
- loop {
93
- match self.inner.write(buf) {
94
- Ok(0) => self.wait()?,
95
- Ok(n) => return Ok(n),
96
- Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => self.wait()?,
97
- Err(e) if e.kind() == std::io::ErrorKind::Interrupted => continue,
98
- Err(e) => return Err(e),
99
- }
100
- }
101
- }
102
-
103
- fn flush(&mut self) -> std::io::Result<()> {
104
- loop {
105
- match self.inner.flush() {
106
- Ok(()) => return Ok(()),
107
- Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => self.wait()?,
108
- Err(e) if e.kind() == std::io::ErrorKind::Interrupted => continue,
109
- Err(e) => return Err(e),
110
- }
111
- }
112
- }
113
- }
114
-
115
28
  /// Result of handling one control socket connection.
116
29
  #[derive(Clone, Debug, PartialEq)]
117
30
  pub enum ControlSocketReply {