mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2026-01-08 13:07:13 +00:00
Right after being created, the SpiceDisplay 'display' private member is added to the VirtViewerDisplaySpice GTK+ container with gtk_container_add. This call will take ownership of the floating reference that SpiceDisplay got upon creation. This means VirtViewerDisplaySpice::display is a pointer to SpiceDisplay, but it must not be unref'ed when the object is destroyed as we don't own that reference. As the container which owns the reference is the VirtViewerDisplaySpice instance itself, we don't need to take an additional reference here. This fixes a crash when exiting remote-viewer after connecting to a SPICE VM: #0 0x00007ffff3f33a81 in g_type_check_instance_is_fundamentally_a (type_instance=0x874500, fundamental_type=80) at gtype.c:3981 #1 0x00007ffff3f19f96 in g_object_unref (_object=0x874500) at gobject.c:3067 #2 0x000000000042a1ea in virt_viewer_display_spice_finalize (obj=0x6ebc30) at virt-viewer-display-spice.c:65 #3 0x00007ffff3f1a257 in g_object_unref (_object=0x6ebc30) at gobject.c:3170 #4 0x0000000000428de7 in destroy_display (data=0x6ebc30) at virt-viewer-session-spice.c:649 #5 0x00007ffff3bbb51b in g_ptr_array_foreach (array=0x7e12a0, func=0x428d71 <destroy_display>, user_data=0x0) at garray.c:1502 #6 0x00007ffff3bbaadf in ptr_array_free (array=0x7e12a0, flags=FREE_SEGMENT) at garray.c:1088 #7 0x00007ffff3bbaa10 in g_ptr_array_unref (array=0x7e12a0) at garray.c:1036 #8 0x00007ffff3bcf9bd in g_data_set_internal (datalist=0xa0adb0, key_id=1622, new_data=0x0, new_destroy_func=0x0, dataset=0x0) at gdataset.c:407 #9 0x00007ffff3bcfe74 in g_datalist_id_set_data_full (datalist=0xa0adb0, key_id=1622, data=0x0, destroy_func=0x0) at gdataset.c:670 #10 0x00007ffff3f1a771 in g_object_set_data (object=0xa0ada0, key=0x437252 "virt-viewer-displays", data=0x0) at gobject.c:3461 #11 0x0000000000429b56 in virt_viewer_session_spice_channel_destroy (s=0x6eb910, channel=0xa0ada0, session=0x8cb3a0) at virt-viewer-session-spice.c:854 #12 0x00007ffff3f12d81 in g_cclosure_marshal_VOID__OBJECT (closure=0x8e8fd0, return_value=0x0, n_param_values=2, param_values=0x7fffffffcd80, invocation_hint=0x7fffffffccc0, marshal_data=0x0) at gmarshal.c:1272 #13 0x00007ffff3f0e143 in g_closure_invoke (closure=0x8e8fd0, return_value=0x0, n_param_values=2, param_values=0x7fffffffcd80, invocation_hint=0x7fffffffccc0) at gclosure.c:768 #14 0x00007ffff3f2aef0 in signal_emit_unlocked_R (node=0x7c1f20, detail=0, instance=0x6eb910, emission_return=0x0, instance_and_params=0x7fffffffcd80) at gsignal.c:3553 #15 0x00007ffff3f2a1f3 in g_signal_emit_valist (instance=0x6eb910, signal_id=219, detail=0, var_args=0x7fffffffd058) at gsignal.c:3309 #16 0x00007ffff3f2a746 in g_signal_emit (instance=0x6eb910, signal_id=219, detail=0) at gsignal.c:3365 #17 0x00007ffff529d784 in spice_session_channel_destroy (session=0x6eb910, channel=0xa0ada0) at spice-session.c:1990 #18 0x00007ffff529ed25 in spice_channel_dispose (gobject=0xa0ada0) at spice-channel.c:153 #19 0x00007ffff52acd26 in spice_display_channel_dispose (object=0xa0ada0) at channel-display.c:136 #20 0x00007ffff3f1a132 in g_object_unref (_object=0xa0ada0) at gobject.c:3133 #21 0x00007ffff52a4afb in spice_channel_delayed_unref (data=0xa0ada0) at spice-channel.c:2156 #22 0x00007ffff3bf21d1 in g_idle_dispatch (source=0xa35a00, callback=0x7ffff52a49f3 <spice_channel_delayed_unref>, user_data=0xa0ada0) at gmain.c:5320 #23 0x00007ffff3bef8eb in g_main_dispatch (context=0x68a920) at gmain.c:3064 #24 0x00007ffff3bf0661 in g_main_context_dispatch (context=0x68a920) at gmain.c:3663 #25 0x00007ffff3bf0853 in g_main_context_iterate (context=0x68a920, block=1, dispatch=1, self=0x6c8c60) at gmain.c:3734 #26 0x00007ffff3bf0c7c in g_main_loop_run (loop=0x889b20) at gmain.c:3928 #27 0x00007ffff69be44f in gtk_main () at gtkmain.c:1207 #28 0x0000000000431896 in main (argc=1, argv=0x7fffffffd648) at remote-viewer-main.c:183 |
||
|---|---|---|
| .tx | ||
| build-aux | ||
| data | ||
| icons | ||
| m4 | ||
| man | ||
| po | ||
| src | ||
| .mailmap | ||
| acinclude.m4 | ||
| AUTHORS.in | ||
| autobuild.sh | ||
| autogen.sh | ||
| cfg.mk | ||
| ChangeLog | ||
| configure.ac | ||
| COPYING | ||
| git.mk | ||
| GNUmakefile | ||
| intltool-extract.in | ||
| intltool-merge.in | ||
| intltool-update.in | ||
| maint.mk | ||
| Makefile.am | ||
| mingw-virt-viewer.spec.in | ||
| NEWS | ||
| README | ||
| virt-viewer.spec.in | ||
Virt Viewer =========== Virt Viewer provides a graphical viewer for the guest OS display. At this time is supports guest OS using the VNC or SPICE protocols. Further protocols may be supported in the future as user demand dicatates. The viewer can connect directly to both local and remotely hosted guest OS, optionally using SSL/TLS encryption. Virt Viewer can be built with either GTK2 or GTK3, with the default option currently being GTK2. The choice can be made with: ./configure --with-gtk=3.0 (or =2.0) Virt Viewer uses the GTK-VNC (>= 0.4.3) widget to provide a display of the VNC protocol, which is available from http://gtk-vnc.sourceforge.net/ Virt Viewer uses the SPICE-GTK (>= 0.22) widget to provide a display of the SPICE protocol, which is available from: http://spice-space.org/page/Spice-Gtk Use of either SPICE-GTK or GTK-VNC can be disabled at time of configure, with --without-gtk-vnc or --without-spice-gtk respectively. Virt Viewer uses libvirt to lookup information about the guest OS display. This is available from http://libvirt.org/ Further information about the Virt Viewer application can be found on the Virt Manager website: http://virt-manager.org/ Feedback should be directed to the mailing list at http://virt-manager.org/mailinglist.html -- End