Skip to content

[BUG] Connecting to adw::TabView's page-detached with template_callback then closing a window with open tabs causes a panic #934

Open
@YaLTeR

Description

@YaLTeR

Bug description

use gtk::prelude::*;

use gtk::glib;

mod imp {
    use gtk::{subclass::prelude::*, CompositeTemplate};

    use super::*;

    #[derive(Debug, Default, CompositeTemplate)]
    #[template(file = "window.ui")]
    pub struct Window {}

    #[glib::object_subclass]
    impl ObjectSubclass for Window {
        const NAME: &'static str = "Window";
        type Type = super::Window;
        type ParentType = gtk::ApplicationWindow;

        fn class_init(klass: &mut Self::Class) {
            Self::bind_template(klass);
            Self::bind_template_callbacks(klass);
        }

        fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
            obj.init_template();
        }
    }

    impl ObjectImpl for Window {}
    impl WidgetImpl for Window {}
    impl WindowImpl for Window {}
    impl ApplicationWindowImpl for Window {}

    #[gtk::template_callbacks]
    impl Window {
        #[template_callback]
        fn on_page_detached(&self) {}
    }
}

glib::wrapper! {
    pub struct Window(ObjectSubclass<imp::Window>)
        @extends gtk::ApplicationWindow, gtk::Window;
}

fn build_ui(app: &adw::Application) {
    let window: Window = glib::Object::new(&[("application", app)]).unwrap();

    window.present();

    // Trigger the crash automatically, but it also works when closing with the "X" button.
    window.close();
}

fn main() {
    let application = adw::Application::new(None, Default::default());

    application.connect_activate(build_ui);

    application.run();
}
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk" version="4.0"/>
  <template class="Window" parent="GtkApplicationWindow">
    <property name="child">
      <object class="AdwTabView">
        <signal name="page-detached" handler="on_page_detached" swapped="true"/>

        <child>
          <object class="GtkLabel">
            <property name="label">Hello World</property>
          </object>
        </child>
      </object>
    </property>
  </template>
</interface>

Backtrace

thread 'main' panicked at 'Internal error: Object destroyed before closure invalidated', /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/gtk4-0.4.6/src/builder_rust_scope.rs:119:68
stack backtrace:
   0:     0x5587a7f8350c - std::backtrace_rs::backtrace::libunwind::trace::h09f7e4e089375279
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x5587a7f8350c - std::backtrace_rs::backtrace::trace_unsynchronized::h1ec96f1c7087094e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x5587a7f8350c - std::sys_common::backtrace::_print_fmt::h317b71fc9a5cf964
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x5587a7f8350c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he3555b48e7dfe7f0
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:46:22
   4:     0x5587a7f9e1cc - core::fmt::write::h513b07ca38f4fb1b
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/fmt/mod.rs:1149:17
   5:     0x5587a7f80de5 - std::io::Write::write_fmt::haf8c932b52111354
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/io/mod.rs:1697:15
   6:     0x5587a7f84c60 - std::sys_common::backtrace::_print::h195c38364780a303
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:49:5
   7:     0x5587a7f84c60 - std::sys_common::backtrace::print::hc09dfdea923b6730
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:36:9
   8:     0x5587a7f84c60 - std::panicking::default_hook::{{closure}}::hb2e38ec0d91046a3
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:211:50
   9:     0x5587a7f84815 - std::panicking::default_hook::h60284635b0ad54a8
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:228:9
  10:     0x5587a7f85314 - std::panicking::rust_panic_with_hook::ha677a669fb275654
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:606:17
  11:     0x5587a7f84df0 - std::panicking::begin_panic_handler::{{closure}}::h976246fb95d93c31
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:502:13
  12:     0x5587a7f839b4 - std::sys_common::backtrace::__rust_end_short_backtrace::h38077ee5b7b9f99a
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:139:18
  13:     0x5587a7f84d59 - rust_begin_unwind
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:498:5
  14:     0x5587a7f1cc51 - core::panicking::panic_fmt::h35f3a62252ba0fd2
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/panicking.rs:107:14
  15:     0x5587a7f9d2f1 - core::panicking::panic_display::h571c717fc6a00c7d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/panicking.rs:63:5
  16:     0x5587a7f1cb4b - core::option::expect_failed::h5f4cab7748df5501
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/option.rs:1637:5
  17:     0x5587a7f3700e - core::option::Option<T>::expect::h7d3b738a5df149fd
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/option.rs:709:21
  18:     0x5587a7f3180a - <gtk4::builder_rust_scope::imp::BuilderRustScope as gtk4::subclass::builder_scope::BuilderScopeImpl>::create_closure::{{closure}}::{{closure}}::h819e513fb4a7712a
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/gtk4-0.4.6/src/builder_rust_scope.rs:119:46
  19:     0x5587a7f3d5da - glib::closure::Closure::new_local::{{closure}}::h06d2178a406365bb
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.15.5/src/closure.rs:203:49
  20:     0x5587a7f3c7b9 - glib::closure::Closure::new_unsafe::marshal::hbe57f41f661a52c7
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.15.5/src/closure.rs:228:26
  21:     0x7fc68e0c5c7f - g_closure_invoke
  22:     0x7fc68e0e2126 - <unknown>
  23:     0x7fc68e0e39ea - g_signal_emit_valist
  24:     0x7fc68e0e3c03 - g_signal_emit
  25:     0x7fc68ecabd66 - detach_page
                               at /var/home/yalter/source/c/libadwaita/build/../src/adw-tab-view.c:927:3
  26:     0x7fc68ecabf17 - adw_tab_view_dispose
                               at /var/home/yalter/source/c/libadwaita/build/../src/adw-tab-view.c:1303:5
  27:     0x7fc68e0d2bc4 - g_object_unref
  28:     0x7fc68e793fd8 - gtk_window_dispose
                               at /usr/src/debug/gtk4-4.4.1-1.2.fc35.x86_64/redhat-linux-build/../gtk/gtkwindow.c:2589:3
  29:     0x7fc68e57d624 - gtk_application_window_dispose
                               at /usr/src/debug/gtk4-4.4.1-1.2.fc35.x86_64/redhat-linux-build/../gtk/gtkapplicationwindow.c:622:3
  30:     0x5587a7f2d54b - glib::subclass::object::dispose::ha003129df45b389f
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.15.5/src/subclass/object.rs:132:9
  31:     0x7fc68e0d2bc4 - g_object_unref
  32:     0x5587a7f64c02 - <glib::object::ObjectRef as core::ops::drop::Drop>::drop::hd30d84ca206a7475
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.15.5/src/object.rs:316:13
  33:     0x5587a7f6864b - core::ptr::drop_in_place<glib::object::ObjectRef>::haa9b3f6fbccbf457
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ptr/mod.rs:188:1
  34:     0x5587a7f2925b - core::ptr::drop_in_place<gtk_test::Window>::he6054d2d2e97e881
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ptr/mod.rs:188:1
  35:     0x5587a7f28bf3 - gtk_test::build_ui::hedffa4e08a85f58d
                               at /var/home/yalter/source/rs/gtk-test/src/main.rs:54:1
  36:     0x5587a7f28fa8 - core::ops::function::Fn::call::ha017e1fb0e3c19e7
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ops/function.rs:70:5
  37:     0x5587a7f2a50b - <O as gio::auto::application::ApplicationExt>::connect_activate::activate_trampoline::h13d3093e29ca1eb1
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.15.5/src/auto/application.rs:604:13
  38:     0x7fc68e0c5c7f - g_closure_invoke
  39:     0x7fc68e0e2126 - <unknown>
  40:     0x7fc68e0e39ea - g_signal_emit_valist
  41:     0x7fc68e0e3c03 - g_signal_emit
  42:     0x7fc68e1ed188 - <unknown>
  43:     0x7fc68e1ed366 - g_application_run
  44:     0x5587a7f217e7 - <O as gio::application::ApplicationExtManual>::run_with_args::hbae41ede72273d06
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.15.5/src/application.rs:30:13
  45:     0x5587a7f218d6 - <O as gio::application::ApplicationExtManual>::run::hce6e51ead2145b74
                               at /var/home/yalter/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.15.5/src/application.rs:23:9
  46:     0x5587a7f28c56 - gtk_test::main::h1ea5dfa7f8a2fd32
                               at /var/home/yalter/source/rs/gtk-test/src/main.rs:61:5
  47:     0x5587a7f2908b - core::ops::function::FnOnce::call_once::hc7a7efbe98df54ba
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ops/function.rs:227:5
  48:     0x5587a7f24e3e - std::sys_common::backtrace::__rust_begin_short_backtrace::hfde91ef9ddb5c976
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:123:18
  49:     0x5587a7f28af1 - std::rt::lang_start::{{closure}}::h6d6d867f85833df7
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:145:18
  50:     0x5587a7f8319b - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h7e688d7cdfeb7e00
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ops/function.rs:259:13
  51:     0x5587a7f8319b - std::panicking::try::do_call::h4be824d2350b44c9
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:406:40
  52:     0x5587a7f8319b - std::panicking::try::h0a6fc7affbe5088d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:370:19
  53:     0x5587a7f8319b - std::panic::catch_unwind::h22c320f732ec805e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panic.rs:133:14
  54:     0x5587a7f8319b - std::rt::lang_start_internal::{{closure}}::hd38309c108fe679d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:128:48
  55:     0x5587a7f8319b - std::panicking::try::do_call::h8fcaf501f097a28e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:406:40
  56:     0x5587a7f8319b - std::panicking::try::h20e906825f98acc1
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:370:19
  57:     0x5587a7f8319b - std::panic::catch_unwind::h8c5234dc632124ef
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panic.rs:133:14
  58:     0x5587a7f8319b - std::rt::lang_start_internal::hc4dd8cd3ec4518c2
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:128:20
  59:     0x5587a7f28ac0 - std::rt::lang_start::h8d66edbaf8b3c3b9
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:144:17
  60:     0x5587a7f28e8c - main
  61:     0x7fc68dd7d560 - __libc_start_call_main
  62:     0x7fc68dd7d60c - __libc_start_main_alias_1
  63:     0x5587a7f1d375 - _start
  64:                0x0 - <unknown>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmacros

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions