Skip to content

fix(control_supervisor): do not pipe child stdout into an unread pipe - #52

Open
Arcod7 wants to merge 1 commit into
feat-pixifrom
aes/fix-supervisor-child-stdout-pipe
Open

fix(control_supervisor): do not pipe child stdout into an unread pipe#52
Arcod7 wants to merge 1 commit into
feat-pixifrom
aes/fix-supervisor-child-stdout-pipe

Conversation

@Arcod7

@Arcod7 Arcod7 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Children were spawned with stdout=PIPE and stderr=STDOUT, but nothing ever
drained them: the Popen handles are only used for poll() and termination.
Once the 64 KB kernel pipe buffer filled, the child blocked in write() and
never recovered.

For ros2_control_node this is quiet and misleading. Its real-time update
loop runs on a separate thread and keeps publishing /joint_states, so the
robot looks connected -- but the main thread runs the executor, so every
subscription and service callback stops. Trajectory commands are never
consumed and every /controller_manager service times out.

Send child stdout/stderr to DEVNULL instead.

Predates #51 (spawner-lock serialization, ready marker) -- that PR touched
the same file but not these three Popen calls, so this is still live on
feat-pixi.

Children were spawned with stdout=PIPE and stderr=STDOUT, but nothing
ever drained them: the Popen handles are only used for poll() and
termination. Once the 64 KB kernel pipe buffer filled, the child blocked
in write() and never recovered.

For ros2_control_node this is quiet and misleading. Its real-time update
loop is a separate thread and keeps publishing /joint_states at the
configured rate, so the robot looks connected, but the main thread runs
the executor -- so every subscription and service callback stops.
Trajectory commands on <controller>/joint_trajectory are never consumed
and every /controller_manager service times out.

Send child stdout/stderr to DEVNULL instead.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant