Skip to content

Voice server segfaults (signal 11) on WSL2 after updating to 1.0.100; /voice stuck on 'Fetching voice models' #5197

Open

Description

@gbot

Summary

After updating to Copilot CLI 1.0.100 (which also pulled a new voice runtime), voice input no longer works on WSL2. The voice server process segfaults (signal 11) a few seconds after starting, so /voice stays on "Fetching voice models" and no model can be downloaded.

Environment

  • Copilot CLI: 1.0.100 (linux-x64), latest at time of report
  • OS: Ubuntu (glibc 2.39) on WSL2, kernel 6.18.33.2-microsoft-standard-WSL2
  • CPU: x64 with AVX2, 8 cores, 16 GB RAM
  • Audio: WSLg PulseAudio available (/mnt/wslg/PulseServer)
  • Voice worked on earlier versions (e.g. 1.0.98) with the older runtime (Microsoft.AI.Foundry.Local.Core.so, ~645 MB)

Steps to reproduce

  1. Update to 1.0.100; the update installs a new voice runtime (libfoundry_local.so, ~85 MB).
  2. Start copilot and run /voice, choose Continue.
  3. Status shows "Fetching voice models" indefinitely.

Actual behaviour

Process log:

[INFO]  voice server: boot pid=1708 endpoint=/run/user/1000/copilot-voice/<id>.sock
[INFO]  voice server: connected to spawned voice server pid=1708
[WARNING] [VoiceEngine] connection error: read ECONNRESET
[ERROR] [VoiceEngine] fatal: Engine connection closed.
[WARNING] [VoiceEngine] start failed: Engine connection closed.

WSL kernel log (repeated on every attempt, ~6-15s after the voice server starts):

copilot: MainThread: potentially unexpected fatal signal 11.
WSL (CaptureCrash): Capturing crash for pid: 1708, executable: .../@github/copilot-linux-x64/copilot, signal: 11

Already tried

  • Removed stale /run/user/$UID/copilot-voice/* socket/pid files
  • Deleted ~/.cache/copilot/foundry and ~/.github-copilot-cli/cache/models, then re-ran /voice to reinstall the runtime. The crash still occurs with the freshly downloaded runtime.
  • ldd on libfoundry_local.so reports no missing libraries.

Expected behaviour

The voice server stays running, the model list loads, and dictation works.

Possibly related: #4024

Activity

  1. added
    area:input-keyboardKeyboard shortcuts, keybindings, copy/paste, clipboard, mouse, and text input
    and removed on Oct 20, 2026
  2. bhardwaj-nakul commented on Oct 21, 2026

    @bhardwaj-nakul

    Same crash on native Linux (not WSL), so it isn't WSL-specific. Backtrace below points at the voice runtime's telemetry uploader.

    Environment

    • Copilot CLI 1.0.101 and 1.0.102-1 (linux-x64) crash; 1.0.98 works
    • foundry-local-sdk 1.2.3 (1.0.98, works) → 2.1.0 (1.0.101+, crashes); runtime cache ~/.cache/copilot/foundry/7deebcd90bf1
    • Ubuntu 24.04.4 LTS, kernel 7.0.0-38-generic, glibc 2.39
    • Behind an HTTP proxy (HTTP(S)_PROXY set). Unsetting all proxy variables does not change the result.

    Repro (no client, no audio needed)

    COPILOT_VOICE_SERVER_MODE=1 COPILOT_VOICE_SERVER_BOOT='{"voice":{"enabled":false}}' copilot
    # -> Segmentation fault (exit 139) after ~2 s on 1.0.101 / 1.0.102-1
    COPILOT_VOICE_SERVER_MODE=1 COPILOT_VOICE_SERVER_BOOT='{"voice":{"enabled":false}}' copilot --prefer-version 1.0.98
    # -> stays up

    It crashes with voice disabled and with no PulseAudio server, so device capture isn't involved.

    Backtrace (gdb)

    #0  __GI___libc_free (mem=0x100000000000000) at malloc.c:3375
    #1  Curl_freeset ()                                    libfoundry_local.so
    #2  Curl_close ()                                      libfoundry_local.so
    #3  curl_easy_cleanup ()                               libfoundry_local.so
    #4  Microsoft::Applications::Events::CurlHttpOperation::~CurlHttpOperation()   libfoundry_local.so
    #6  std::_Sp_counted_deleter<...CurlHttpOperation*, ...MakeTrackedOperation...>
    #8  Microsoft::Applications::Events::HttpClient_Curl::SendRequestAsync(...)::{lambda}  libfoundry_local.so
    #10 std::_Function_base::~_Function_base()             libonnxruntime-genai.so
    #11 std::thread::_State_impl<...CurlHttpOperation::SendAsync(...)...>
    #14 start_thread
    

    The crash is in the 1DS telemetry HTTP client (Microsoft::Applications::Events) inside libfoundry_local.so: curl_easy_cleanup frees an invalid pointer. Frame #10 resolving to libonnxruntime-genai.so may mean both libraries carry their own copy of the 1DS/curl symbols and they clash (ODR/symbol interposition).

    Workaround: copilot --prefer-version 1.0.98 (the voice server is spawned with the same --prefer-version).

  3. nailujx86 commented on Oct 22, 2026

    @nailujx86

    It crashes with the same backtrace on Fedora 44, this is not limited to WSL.

  4. 1bwood1 commented on Oct 22, 2026

    @1bwood1

    Workaround (confirmed on WSL2, CLI 1.0.101)

    Root cause: the voice runtime's 1DS telemetry uploader crashes
    (CurlHttpOperation -> curl_easy_cleanup -> invalid free). The runtime
    skips that upload when it detects a CI environment, so setting a CI marker
    variable that the CLI itself doesn't read avoids the crash.

    How to apply

    1. Add this to ~/.bashrc (or ~/.zshrc). It sets the variable only for the
      copilot command, not your whole shell:

      copilot() { JENKINS_URL=disabled-1ds command copilot "$@"; }
      
    2. Reload your shell: source ~/.bashrc (or open a new terminal).

    3. Exit any running copilot session completely and start it again. The voice
      server inherits its environment from the CLI, so a session that's already
      running won't pick up the change.

    4. Run /voice as usual.

    One-off test without editing your rc file

    JENKINS_URL=disabled-1ds copilot
    

    Verify: with the repro from the comment above, the voice server segfaults
    without the variable and stays running with it:

    COPILOT_VOICE_SERVER_MODE=1 COPILOT_VOICE_SERVER_BOOT='{"voice":{"enabled":false}}' JENKINS_URL=disabled-1ds copilot
    

    Side effects: the only one is that the voice runtime stops uploading its
    usage telemetry. Dictation and model downloads still work. Remove the line once
    this issue is fixed.

  5. alisonsm92 commented on Oct 22, 2026

    @alisonsm92

    Also reproducing on WSL2 (Ubuntu, kernel 6.18.33.2-microsoft-standard-WSL2).

    Behavior

    • CLI 1.0.103: /voice fails with [VoiceEngine] start failed: Engine connection closed (ECONNRESET ~1s after connecting to the spawned voice server).
    • dmesg shows copilot: MainThread: potentially unexpected fatal signal 11 on every attempt.
    • The voice server process log only contains the boot / ready lines, with no error before it dies.
    • CLI 1.0.98: /voice works.

    Ruled out

    • Foundry Local 0.12.0 is installed and its daemon is running.
    • The speech model nemotron-3.5-asr-streaming-0.6b-generic-cpu:3 is downloaded and cached.
    • The bundled foundry-local-sdk loads fine and its native libs are present.
    • The microphone works in isolation (pvrecorder and parecord via the WSLg PulseServer).

    This looks like a regression between 1.0.98 and 1.0.103 in the voice server's native code path.

    Workaround
    copilot --prefer-version 1.0.98 (this also disables auto-update).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:input-keyboardKeyboard shortcuts, keybindings, copy/paste, clipboard, mouse, and text input

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions