Skip to content

Crash (SIGSEGV) in setParameter()/getParameter() retry for COM_OBL_ACT after HIL TCP send failures #168

Description

@thueljules

Summary

AirSimNH/ProjectAirSim crashes with a SIGSEGV while retrying setParameter()/getParameter() for a PX4 parameter (COM_OBL_ACT), after the HIL MAVLink TCP connection to PX4 SITL had already started failing with socket send errors. Expected behavior: a stalled/unresponsive FCU parameter exchange should be handled as a timeout/error, not crash the whole process.

Environment

  • ProjectAirSim binary: Neighborhood-Linux-UE5.2-PAS_v0.2.0 (Linux)
  • PX4: SITL, running in Docker with network_mode: host (one PX4 instance per container, HIL over TCP)
  • Reproduced while integrating a downstream PX4 adapter against this exact stack

Steps to reproduce

  1. Launch the ProjectAirSim binary natively; start PX4 SITL (Docker); publish a scene-load message using the ROS2 Node (HIL TCP connects, GPS lock, home position set).
  2. Restart the PX4 container (docker restart) to force a clean TCP reconnect
  3. Re-publish the scene-load message a second time.
  4. The server log shows the HIL TCP connection failing to send:
    [PX4Api] Exception sending messages to vehicle
    [PX4Api] MavLinkConnectionImpl: Error sending message on connection 'hil', details: TcpClientPort socket send failed with error: 32
    [PX4Api] Disconnecting mavlink vehicle
    [PX4Api] SetNormalMode: putting PX4 in non-simulation mode via cmd
    
    (error 32 = EPIPE/broken pipe), repeating on a ~1s cycle.
  5. Shortly after, during a parameter sync attempt for COM_OBL_ACT, the process crashes:
    setParameter() calling getParameter() for COM_OBL_ACT, try #6...
    Signal 11 caught.
    Malloc Size=262146 LargeMemoryPoolOffset=262162
    CommonUnixCrashHandler: Signal=11
    Failed to find symbol file, expected location:
    ".../AirSimNH-Linux-Shipping.sym"
    Malloc Size=131160 LargeMemoryPoolOffset=393352
    Malloc Size=131160 LargeMemoryPoolOffset=524536
    Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
    Segmentation fault (core dumped)
    

Additional context

Independently (via a separate MAVLink client and via MAVROS against the same PX4 instance), I've confirmed the PX4 SITL instance had stopped responding to all inbound command/parameter/mission requests at this point, while still sending outbound telemetry normally , so the FCU itself was in a degraded state by the time this crash happened. That degraded FCU state may be a separate/pre-existing issue, but regardless of its cause, setParameter()'s retry-then-crash behavior on a non-responding FCU looks like the actual bug worth fixing here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions