Hi Alex,

Thanks for the quick response.

The crash typically requires several toggles (3-10) to trigger, and I
reproduced it with active torrents downloading.

I'm afraid I'm not a C++ developer so cannot comment on the code internals
or the proposed patch. I am however familiar with deb packaging and can
apt-get source and rebuild a patched package myself if that would help.

I have since downgraded to 4.1.0~beta2 from trixie main to avoid the crash,
but I am happy to upgrade and test if you produce a patched package, or
build one myself from a patch.

Regards,
Jan

On Mon, 16 Mar 2026 at 23:35, Alexandre Rossi <[email protected]> wrote:

> Hi,
>
> > # Steps to reproduce
> >
> > 1. Open transmission-gtk with active torrents
> > 2. Open Edit > Preferences > Speed
> > 3. Interact repeatedly with any control in the "Scheduled times" section
> (checkbox, start time, end time, day-of-week)
> > 4. Crash occurs, sometimes after a few interactions
> >
> > The crash also occurs when the scheduled time fires automatically.
> > This feature is especially useful where metered data includes
> differently-priced "night-owl" data.
>
> I played a bit with those controls and could not reproduce the crash.
>
> > `Actions.cc:183` has no missing-key guard:
> > ```
> > $ grep -n 'key_to_action.at\|key_to_action.find' gtk/Actions.cc
> > 183:    return key_to_action.at(name);
> > ```
> >
> > The action is registered under a hyphenated name in `Actions.cc`, but
> `Application.cc` looks it up via the raw libtransmission quark string
> (which uses underscores):
> > ```
> > $ grep -n 'alt.speed.enabled' gtk/Actions.cc gtk/Application.cc
> > Actions.cc:73:    "alt-speed-enabled"sv,
> > Application.cc:1302:    case TR_KEY_alt_speed_enabled:
> > Application.cc:1306:
> gtr_action_set_toggled(std::string(tr_quark_get_string_view(key)), b);
> > ```
>
> From a quick look, do you mean that the following patch might fix this?
>
> --- i/gtk/Application.cc
> +++ w/gtk/Application.cc
> @@ -1275,7 +1275,7 @@ void Application::Impl::on_prefs_changed(tr_quark
> const key)
>          {
>              bool const b = gtr_pref_flag_get(key);
>              tr_sessionUseAltSpeed(tr, b);
> -
> gtr_action_set_toggled(std::string(tr_quark_get_string_view(key)), b);
> +
> gtr_action_set_toggled(std::string(tr_quark_get_string_view(TR_KEY_alt_speed_enabled_kebab_APICOMPAT)),
> b);
>              break;
>          }
>
> Thanks,
>
> Alex
>

Reply via email to