saivert / pwvucontrol

Pipewire Volume Control
GNU General Public License v3.0
272 stars 8 forks source link

ISSUE: Can't find property 'channelmodel' for type 'PwVolumeBox' #7

Closed linuxmobile closed 5 months ago

linuxmobile commented 6 months ago

I just installed, try to lunch and get:

I 18:39:15.959805            wp-core ../lib/wp/core.c:183:core_info: <WpCore:0x560a0fe2bd70> connected to server: pipewire-0, cookie: 4231737401
I 18:39:15.960770          wp-plugin ../lib/wp/plugin.c:125:wp_plugin_activate_execute_step: <WpMixerApi:0x560a0fe5b710> enabling plugin 'mixer-api'
I 18:39:15.961786                    src/manager.rs:250:: added metadata object: 47
I 18:39:15.961816                    src/manager.rs:254:: Metadata value: 0, "default.audio.source", "Spa:String:JSON", "{\"name\":\"alsa_input.pci-0000_04_00.6.analog-stereo\"}"
I 18:39:15.961825                    src/manager.rs:254:: Metadata value: 0, "default.video.source", "Spa:String:JSON", "{\"name\":\"v4l2_input.pci-0000_04_00.3-usb-0_3_1.0\"}"
I 18:39:15.961832                    src/manager.rs:254:: Metadata value: 0, "default.audio.sink", "Spa:String:JSON", "{\"name\":\"alsa_output.pci-0000_04_00.6.analog-stereo\"}"
I 18:39:15.961840                    src/manager.rs:254:: Metadata value: 0, "default.configured.audio.sink", "Spa:String:JSON", "{ \"name\": \"bluez_output.9C_19_C2_2F_32_BA.1\" }"
I 18:39:15.961847                    src/manager.rs:254:: Metadata value: 0, "default.configured.audio.source", "Spa:String:JSON", "{ \"name\": \"bluez_input.9C:19:C2:2F:32:BA\" }"
I 18:39:15.963173                    src/manager.rs:211:: Activated plugin mixer-api
I 18:39:15.963204          wp-plugin ../lib/wp/plugin.c:125:wp_plugin_activate_execute_step: <WpDefaultNodesApi:0x560a0feaf340> enabling plugin 'default-nodes-api'
I 18:39:15.963470                    src/manager.rs:211:: Activated plugin default-nodes-api
I 18:39:15.963526                    src/manager.rs:157:: added: Some("effect_input.rnnoise")
thread 'main' panicked at /build/cargo-vendor-dir/glib-0.18.1/src/object.rs:1452:40:
Can't find property 'channelmodel' for type 'PwVolumeBox'
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
calebstewart commented 6 months ago

I am also seeing this error, but only if I have specific applications open. I believe it's related to active recording sessions. For example, when I have Zoom open, this happens (this is, however, an assumption/guess based on anecdotal observation). Running with RUST_BACKTRACE=full gives the following output:

thread 'main' panicked at /build/cargo-vendor-dir/glib-0.18.1/src/object.rs:1452:40:
Can't find property 'channelmodel' for type 'PwVolumeBox'
stack backtrace:
   0:     0x555dace3a1f7 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h4886110ae7835fd2
   1:     0x555dace691c0 - core::fmt::write::h6fab83f0f5bc0c8f
   2:     0x555dace51c55 - std::io::Write::write_fmt::h64824cb874054607
   3:     0x555dace39fc4 - std::sys_common::backtrace::print::hb8fea9d041077138
   4:     0x555dace3ab37 - std::panicking::default_hook::{{closure}}::hc60f0f690c67943c
   5:     0x555dace3a897 - std::panicking::default_hook::h56281bcc5d6e2f17
   6:     0x555dace3b0a8 - std::panicking::rust_panic_with_hook::hd61e30fe5971d187
   7:     0x555dace3af8a - std::panicking::begin_panic_handler::{{closure}}::h95d2684e28f89fd2
   8:     0x555dace3a426 - std::sys_common::backtrace::__rust_end_short_backtrace::h48780d898316fff8
   9:     0x555dace3acd4 - rust_begin_unwind
  10:     0x555dacdacb85 - core::panicking::panic_fmt::hdb89b5c14a056cec
  11:     0x555dace26487 - glib::object::Object::new_internal::h8a39c660d1bb679e
  12:     0x555dacdf9c5d - pwvucontrol::volumebox::PwVolumeBox::new::hb12d802db5e23347
  13:     0x555dacdcfeae - gtk4::auto::list_box::ListBox::bind_model::create_widget_func_func::h808c5156360ed768
  14:     0x7f40213bab0a - gtk_list_box_bound_model_changed
  15:     0x7f4022237668 - g_closure_invoke
  16:     0x7f402224bbcc - signal_emit_unlocked_R.isra.0
  17:     0x7f402224d561 - signal_emit_valist_unlocked
  18:     0x7f40222532c2 - g_signal_emit_valist
  19:     0x7f402225336f - g_signal_emit
  20:     0x7f402136f245 - gtk_filter_list_model_items_changed_cb
  21:     0x7f4022237668 - g_closure_invoke
  22:     0x7f402224bbcc - signal_emit_unlocked_R.isra.0
  23:     0x7f402224d561 - signal_emit_valist_unlocked
  24:     0x7f40222532c2 - g_signal_emit_valist
  25:     0x7f402225336f - g_signal_emit
  26:     0x555dacdfec59 - wireplumber::auto::object_manager::ObjectManager::connect_object_added::object_added_trampoline::h8d995ffc4d8dd775
  27:     0x7f402223a961 - g_cclosure_marshal_VOID__OBJECTv
  28:     0x7f4022237861 - _g_closure_invoke_va
  29:     0x7f402224d69c - signal_emit_valist_unlocked
  30:     0x7f40222532c2 - g_signal_emit_valist
  31:     0x7f402225336f - g_signal_emit
  32:     0x7f40224a38af - wp_object_manager_add_object
  33:     0x7f40224a39fb - on_proxy_ready
  34:     0x7f4022237668 - g_closure_invoke
  35:     0x7f40224bdc48 - wp_transition_return
  36:     0x7f40224be5ca - wp_transition_advance
  37:     0x7f40224a02ac - wp_object_advance_transitions
  38:     0x7f402212ee39 - g_main_dispatch
  39:     0x7f4022131fd7 - g_main_context_iterate_unlocked.isra.0
  40:     0x7f40221325cc - g_main_context_iteration
  41:     0x7f402236dd9d - g_application_run
  42:     0x555dacdedb2d - gio::application::ApplicationExtManual::run::h4627c9042450ce83
  43:     0x555dacdbc7ed - pwvucontrol::main::hc842806150487d45
  44:     0x555dace05b53 - std::sys_common::backtrace::__rust_begin_short_backtrace::h50b155cf948b1bee
  45:     0x555dacde7579 - std::rt::lang_start::{{closure}}::h28e5037888185310
  46:     0x555dace3abd4 - std::panicking::try::ha86251cf5daa9bea
  47:     0x555dace301db - std::rt::lang_start_internal::ha6a51778162f8d22
  48:     0x555dacdbf6e5 - main
  49:     0x7f4020d8310e - __libc_start_call_main
  50:     0x7f4020d831c9 - __libc_start_main@@GLIBC_2.34
  51:     0x555dacdad3f5 - _start
  52:                0x0 - <unknown>

I'm currently on NixOS, and this has happened on two separate hosts (different hardware) in the exact same way.

$ pipewire --version
pipewire
Compiled with libpipewire 1.0.6
Linked with libpipewire 1.0.6
saivert commented 5 months ago

Is this using latest build from main branch?

See https://github.com/saivert/pwvucontrol/commit/22aad420909496a6535fb4de6254ddd634b92ac7

linuxmobile commented 5 months ago

Is this using latest build from main branch?

See 22aad42

idk. I'm not the mantainer. Here is the pkg: https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/applications/audio/pwvucontrol/default.nix#L65

calebstewart commented 5 months ago

I'm currently on v0.3.1. I will try with the latest version and/or building from source on main, and let you know what happens.

calebstewart commented 5 months ago

I tried again with both v0.4 and with the current main (c7c3b10796d370a25821f067f2833189ab428ee3). I still get a crash, but with a panic and a new backtrace. This still only seems to happen when an application has an active recording session (tested w/ a zoom meeting active). The backtraces for main and for v0.4 appear identical.

$ RUST_BACKTRACE=full pwvucontrol
thread 'main' panicked at src/ui/route_dropdown.rs:84:60:
device
stack backtrace:
   0:     0x55cb25438737 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h4886110ae7835fd2
   1:     0x55cb25468400 - core::fmt::write::h6fab83f0f5bc0c8f
   2:     0x55cb25450f35 - std::io::Write::write_fmt::h64824cb874054607
   3:     0x55cb25438504 - std::sys_common::backtrace::print::hb8fea9d041077138
   4:     0x55cb25439077 - std::panicking::default_hook::{{closure}}::hc60f0f690c67943c
   5:     0x55cb25438dd7 - std::panicking::default_hook::h56281bcc5d6e2f17
   6:     0x55cb254395e8 - std::panicking::rust_panic_with_hook::hd61e30fe5971d187
   7:     0x55cb254394ca - std::panicking::begin_panic_handler::{{closure}}::h95d2684e28f89fd2
   8:     0x55cb25438966 - std::sys_common::backtrace::__rust_end_short_backtrace::h48780d898316fff8
   9:     0x55cb25439214 - rust_begin_unwind
  10:     0x55cb2539fda5 - core::panicking::panic_fmt::hdb89b5c14a056cec
  11:     0x55cb253a0393 - core::option::expect_failed::h27bb97517ce6ecdf
  12:     0x55cb253b0005 - <pwvucontrol::ui::route_dropdown::imp::PwRouteDropDown as glib::subclass::object::ObjectImpl>::set_property::h9a06b112c8e94c5c
  13:     0x55cb254023bd - glib::subclass::object::set_property::hcf597ad27ab54cb1
  14:     0x7facb15eae68 - object_set_property
  15:     0x7facb15eda36 - g_object_setv
  16:     0x7facb15eebab - g_object_set_property
  17:     0x55cb25406e59 - pwvucontrol::ui::route_dropdown::imp::<impl pwvucontrol::ui::route_dropdown::PwRouteDropDown>::set_nodeobject::h01362fdaf455176b
  18:     0x55cb253abb37 - <pwvucontrol::ui::sinkbox::imp::PwSinkBox as glib::subclass::object::ObjectImpl>::constructed::h6a8a0cfae2186c58
  19:     0x7facb15eb796 - g_object_new_internal.part.0
  20:     0x7facb15ecaa6 - g_object_new_with_properties
  21:     0x55cb25420fd9 - glib::object::Object::new_internal::h973fa9b24e5c653a
  22:     0x55cb253fee31 - pwvucontrol::ui::sinkbox::PwSinkBox::new::ha6d045a6fd335c4a
  23:     0x55cb253ed99e - gtk4::auto::list_box::ListBox::bind_model::create_widget_func_func::h9da6bc26a96ca2ce
  24:     0x7facb1bbab0a - gtk_list_box_bound_model_changed
  25:     0x7facb15e4668 - g_closure_invoke
  26:     0x7facb15f8bcc - signal_emit_unlocked_R.isra.0
  27:     0x7facb15fa561 - signal_emit_valist_unlocked
  28:     0x7facb16002c2 - g_signal_emit_valist
  29:     0x7facb160036f - g_signal_emit
  30:     0x55cb253a8123 - glib::closure::Closure::new_unsafe::marshal::ha4d00545cb91c310
  31:     0x7facb15e4668 - g_closure_invoke
  32:     0x7facb15f8f39 - signal_emit_unlocked_R.isra.0
  33:     0x7facb15fa561 - signal_emit_valist_unlocked
  34:     0x7facb16002c2 - g_signal_emit_valist
  35:     0x7facb160036f - g_signal_emit
  36:     0x7facb1b6f245 - gtk_filter_list_model_items_changed_cb
  37:     0x7facb15e4668 - g_closure_invoke
  38:     0x7facb15f8bcc - signal_emit_unlocked_R.isra.0
  39:     0x7facb15fa561 - signal_emit_valist_unlocked
  40:     0x7facb16002c2 - g_signal_emit_valist
  41:     0x7facb160036f - g_signal_emit
  42:     0x7facb1701d13 - g_list_store_append
  43:     0x55cb253d60a3 - wireplumber::auto::object_manager::ObjectManager::connect_object_added::object_added_trampoline::h83417ea273f836f3
  44:     0x7facb15e7961 - g_cclosure_marshal_VOID__OBJECTv
  45:     0x7facb15e4861 - _g_closure_invoke_va
  46:     0x7facb15fa69c - signal_emit_valist_unlocked
  47:     0x7facb16002c2 - g_signal_emit_valist
  48:     0x7facb160036f - g_signal_emit
  49:     0x7facb14388af - wp_object_manager_add_object
  50:     0x7facb14389fb - on_proxy_ready
  51:     0x7facb15e4668 - g_closure_invoke
  52:     0x7facb1452c48 - wp_transition_return
  53:     0x7facb14535ca - wp_transition_advance
  54:     0x7facb14352ac - wp_object_advance_transitions
  55:     0x7facb14dde39 - g_main_dispatch
  56:     0x7facb14e0fd7 - g_main_context_iterate_unlocked.isra.0
  57:     0x7facb14e15cc - g_main_context_iteration
  58:     0x7facb171ad9d - g_application_run
  59:     0x55cb253c5948 - pwvucontrol::application::PwvucontrolApplication::run::h943496ae5ba95767
  60:     0x55cb253d3bc4 - pwvucontrol::main::h3f145f1773515503
  61:     0x55cb253f6d23 - std::sys_common::backtrace::__rust_begin_short_backtrace::h1bcb46511d4aefc0
  62:     0x55cb253ef189 - std::rt::lang_start::{{closure}}::hf29885ebafef071b
  63:     0x55cb25439114 - std::panicking::try::ha86251cf5daa9bea
  64:     0x55cb2542e44b - std::rt::lang_start_internal::ha6a51778162f8d22
  65:     0x55cb253d4c85 - main
  66:     0x7facb103d10e - __libc_start_call_main
  67:     0x7facb103d1c9 - __libc_start_main@@GLIBC_2.34
  68:     0x55cb253a0655 - _start
  69:                0x0 - <unknown>

For the other NixOS user in this thread, I used the following overlay to install the newest version (replace 0.4 with a commit hash to build from a specific commit):

[REMOVED FOR FUTURE GOOGLERS. I MESSED THIS UP. LOOK BELOW.
calebstewart commented 5 months ago

Taking a closer look at the code, I think I may have fudged that up a bit, given that https://github.com/saivert/pwvucontrol/commit/c7c3b10796d370a25821f067f2833189ab428ee3 seems to have removed the expect("device") which appears to have caused my latest backtrace.

I will revisit in the morning most likely.

saivert commented 5 months ago

Yes this is most likely the expect call which has now been turned into the following code:

let Some(deviceobject) = nodeobject.get_device() else {
                    pwvucontrol_info!("Missing device");
                    return;
                };

EDIT: Just made a new 0.4.1 release so then a flatpak will be built by the CI and you can download and use that at least.

calebstewart commented 5 months ago

Just fixed my original NixOS overlay to actually build from the latest version correctly, and it seems to be working! I'll look into putting a PR in over in Nixpkgs to get it updated there as well. For future googlers, this is the final overlay I used which seems to have fixed the problem for me in the meantime:

  nixpkgs.overlays = [
    (self: super: {
      pwvucontrol = super.pwvucontrol.overrideAttrs (old: rec {
        version = "0.4.1";

        src = super.fetchFromGitHub {
          owner = "saivert";
          repo = "pwvucontrol";
          rev = "0.4.1";
          sha256 = "sha256-soxB8pbbyYe1EXtopq1OjoklEDJrwK6od4nFLDwb8LY=";
        };

        cargoDeps = super.rustPlatform.importCargoLock {
          lockFile = "${src}/Cargo.lock";
          outputHashes = {
            "wireplumber-0.1.0" = "sha256-+LZ8xKok2AOegW8WvfrfZGXuQB4xHrLNshcTOHab+xQ=";
          };
        };
      });
    })
  ];