When opening a samba share from nautilus and opening a picture from a directory with images, the image loaded opens quickly. Using the thumbnail pane to select a different picture, however, is very slow. The selected image takes forever to load.
One plausible explanation is that the jobs that are taking care of thumbnailing the images visible in the pane have higher (or the same) priority than then one that has to load the image selected. So the image won't be loaded until after the thumbnailing is done.
Once all images have cached thumbnails, however, the problem persists, although now images load a bit faster, but they still take considerably more time than if one loads them from Nautilus. Observing the network usage from gnome-system-monitor shows that there's a lot of incoming network activity, but considerably more data is received what one would expect from the size of the picture.
Further observing network activity led me to notice that just hovering over other images is enough for network activity to spike. I suspect that eog is loading the entire image in order to get the image information that is displayed in the tooltip. If you quickly move the mouse over the thumbnail pane, so that you go over all the pictures, it's clear that eog is loading every image for no reason, as once you hover away from a thumbnail, you don't need the tooltip information anymore.
I assume that this always happens, but when images are local, in a reasonably fast computer this is not noticeable. However it's clear that there's a lot that could be improved here using task cancellation and prioritization.
Shouldn't the reference be taken here? Or would that end up leaking the reference?
But as I said earlier I think the problem might not be that the Drag is destroyed, but that the frameclock is gone. The struct is not keeping a reference to the frame clock, just a pointer. Since the timeout is staying in the main loop past the lifetime of the test, I suppose that the frame clock object is no longer alive.
You're right! But only when the source is removed in the callback.
On second thought, I see that the GdkDragAnim
struct is storing a reference to the GdkDrag
object, and this struct is only freed when the source is removed, so this crash shouldn't be happening as the source is keeping its own reference during its lifetime
Done!
Claudio Saavedra (df1177e3) at 21 Sep 15:26
gdk/win32: remove drag animation source on finalize
... and 2 more commits
NB: I only made sure that this builds with x11, didn't test it nor built win32 or mac targets.
The drag animation source needs to be removed when the drag object is finalized, otherwise it's possible that the source stays in the main loop after even after the object is gone.
Fixes #6108
Claudio Saavedra (0fdd998c) at 21 Sep 13:00
gdk: remove drag animation source on finalize
We have this crash in WebKitTestRunner, from the look of it, it seems that some test is doing dnd, it ends before the gdk_drag_anim_timeout
source gets removed, and I suspect that WK cleans up the Drag object, while the timeout source is still in the main loop. Later on, WebKitTestRunner is iterating the mainloop manually, and the source gets dispatched, but the drag object doesn't exist anymore, causing a crash.
I am not entirely sure this actually what's happening, but from looking at gdkdrag-x11.c, I wonder whether the finalize
method should call g_source_remove() on the timeout source?
Here is the relevant part of the stacktrace, sorry but it has no symbols:
[New LWP 91076]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/app/webkit/WebKitBuild/Release/bin/WebKitTestRunner --localhost-alias web-plat'.
Program terminated with signal SIGBUS, Bus error.
#0 0x00007f06506855d2 in gdk_frame_clock_get_frame_time (frame_clock=0x55a3b9e314a0) at ../gdk/gdkframeclock.c:282
282 g_return_val_if_fail (GDK_IS_FRAME_CLOCK (frame_clock), 0);
[Current thread is 1 (Thread 0x7f064b5fa9c0 (LWP 89937))]
Thread 1 (Thread 0x7f064b5fa9c0 (LWP 89937)):
#0 0x00007f06506855d2 in gdk_frame_clock_get_frame_time (frame_clock=0x55a3b9e314a0) at ../gdk/gdkframeclock.c:282
#1 0x00007f06506d43fe in gdk_drag_anim_timeout (data=0x55a3c1127ac0, data@entry=<error reading variable: value has been optimized out>) at ../gdk/x11/gdkdrag-x11.c:1760
#2 0x00007f0659fdbbdf in g_timeout_dispatch (source=source@entry=0x55a3c4502020, callback=<optimized out>, user_data=<optimized out>) at ../glib/gmain.c:5054
#3 0x00007f0659fdb527 in g_main_dispatch (context=0x55a3b14444f0) at ../glib/gmain.c:3460
#4 g_main_context_dispatch (context=0x55a3b14444f0) at ../glib/gmain.c:4200
#5 0x00007f065a038888 in g_main_context_iterate.constprop.0 (context=0x55a3b14444f0, block=<optimized out>, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4276
#6 0x00007f0659fdad7f in g_main_loop_run (loop=0x55a3b1cc4910) at ../glib/gmain.c:4479
#7 0x00007f0654afec00 in WTF::RunLoop::run() () at /app/webkit/WebKitBuild/Release/lib/libjavascriptcoregtk-6.0.so.1
#8 0x000055a3af5adff1 in WTR::TestController::platformRunUntil(bool&, WTF::Seconds) ()
#9 0x000055a3af571e48 in WTR::TestController::resetContentExtensions() ()
#10 0x000055a3af582964 in WTR::TestController::resetStateToConsistentValues(WTR::TestOptions const&, WTR::TestController::ResetStage) ()
#11 0x000055a3af5945bd in WTR::TestInvocation::invoke() ()
#12 0x000055a3af578fb7 in WTR::TestController::runTest(char const*) ()
#13 0x000055a3af579271 in WTR::TestController::runTestingServerLoop() ()
#14 0x000055a3af579898 in WTR::TestController::TestController(int, char const**) ()
#15 0x000055a3af5b03ea in main ()
The full stacktrace is here: https://build.webkit.org/results/GTK-Linux-64-bit-Release-GTK4-Tests/268120@main%20(29704)/fast/events/before-input-events-prevent-inline-text-direction-crash-log.txt
We are hitting this with one of test in WebKitGTK when using the GTK4 build. Here's a detailed stacktrace:
crash log for WebKitTestRunner (pid 30):
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/app/webkit/WebKitBuild/Debug/bin/WebKitTestRunner --localhost-alias web-platfo'.
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0 g_logv (log_domain=0x7f895bb9a917 "Gdk", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1422
1422 g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
[Current thread is 1 (Thread 0x7f8956eb5140 (LWP 30))]
Thread 1 (Thread 0x7f8956eb5140 (LWP 30)):
#0 g_logv (log_domain=0x7f895bb9a917 "Gdk", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1422
#1 0x00007f8973f98c53 in g_log (log_domain=log_domain@entry=0x7f895bb9a917 "Gdk", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f8973ffcff7 "%s: assertion '%s' failed") at ../glib/gmessages.c:1460
#2 0x00007f8973f99e6d in g_return_if_fail_warning (log_domain=log_domain@entry=0x7f895bb9a917 "Gdk", pretty_function=pretty_function@entry=0x7f895bbb3c80 <__func__.10> "gdk_monitor_get_geometry", expression=<optimized out>) at ../glib/gmessages.c:2930
#3 0x00007f895ba89630 in gdk_monitor_get_geometry (monitor=monitor@entry=0x0, geometry=geometry@entry=0x7ffe5feeb1b0) at ../gdk/gdkmonitor.c:356
#4 0x00007f895bac767d in gdk_x11_surface_layout_popup (layout=0x56082988c320, height=63, width=132, surface=0x56082963ff70) at ../gdk/x11/gdksurface-x11.c:1757
#5 gdk_x11_surface_present_popup (layout=0x56082988c320, height=63, width=132, surface=0x56082963ff70) at ../gdk/x11/gdksurface-x11.c:1821
#6 gdk_x11_popup_present (popup=0x56082963ff70, width=132, height=63, layout=0x56082988c320) at ../gdk/x11/gdksurface-x11.c:4912
#7 0x00007f895b83684f in present_popup (popover=popover@entry=0x56082a3f4410) at ../gtk/gtkpopover.c:627
#8 0x00007f895b836a7e in gtk_popover_show (widget=0x56082a3f4410) at ../gtk/gtkpopover.c:1088
#9 0x00007f8959f6ff35 in _g_closure_invoke_va (param_types=<optimized out>, n_params=<optimized out>, args=0x7ffe5feeb440, instance=<optimized out>, return_value=<optimized out>, closure=0x560823e10080) at ../gobject/gclosure.c:895
#10 g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffe5feeb440) at ../gobject/gsignal.c:3472
#11 0x00007f8959f70033 in g_signal_emit (instance=instance@entry=0x56082a3f4410, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3622
#12 0x00007f895b8e4c51 in gtk_widget_show (widget=0x56082a3f4410) at ../gtk/gtkwidget.c:2717
#13 0x00007f89722a1ccf in WebCore::ValidationBubble::showRelativeTo(WebCore::IntRect const&) (this=0x7f894d00f3c0, anchorRect=...) at /app/webkit/Source/WebCore/platform/gtk/ValidationBubbleGtk.cpp:119
#14 0x00007f896d702b6b in WebKit::WebPageProxy::showValidationMessage(WebCore::IntRect const&, WTF::String const&) (this=0x7f894d011200, anchorClientRect=..., message=...) at /app/webkit/Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp:88
#15 0x00007f896c443bf6 in _ZZN3IPC18callMemberFunctionIN6WebKit12WebPageProxyES2_FvRKN7WebCore7IntRectERKN3WTF6StringEESt5tupleIJS4_S8_EEEEvPT_MT0_T1_OT2_ENKUlDpOT_E_clIJS4_S8_EEEDaSN_ (__closure=0x7ffe5feeb730) at /app/webkit/Source/WebKit/Platform/IPC/HandleMessage.h:136
#16 0x00007f896c4880e5 in _ZSt13__invoke_implIvZN3IPC18callMemberFunctionIN6WebKit12WebPageProxyES3_FvRKN7WebCore7IntRectERKN3WTF6StringEESt5tupleIJS5_S9_EEEEvPT_MT0_T1_OT2_EUlDpOT_E_JS5_S9_EESF_St14__invoke_otherOSH_DpOT1_ (__f=...) at /usr/include/c++/12.2.0/bits/invoke.h:61
#17 0x00007f896c462471 in _ZSt8__invokeIZN3IPC18callMemberFunctionIN6WebKit12WebPageProxyES3_FvRKN7WebCore7IntRectERKN3WTF6StringEESt5tupleIJS5_S9_EEEEvPT_MT0_T1_OT2_EUlDpOT_E_JS5_S9_EENSt15__invoke_resultISF_JDpT0_EE4typeEOSF_DpOSR_ (__fn=...) at /usr/include/c++/12.2.0/bits/invoke.h:96
#18 0x00007f896c443c5d in _ZSt12__apply_implIZN3IPC18callMemberFunctionIN6WebKit12WebPageProxyES3_FvRKN7WebCore7IntRectERKN3WTF6StringEESt5tupleIJS5_S9_EEEEvPT_MT0_T1_OT2_EUlDpOT_E_SE_JLm0ELm1EEEDcOSF_OSH_St16integer_sequenceImJXspT1_EEE (__f=..., __t=...) at /usr/include/c++/12.2.0/tuple:1852
#19 0x00007f896c443c9e in _ZSt5applyIZN3IPC18callMemberFunctionIN6WebKit12WebPageProxyES3_FvRKN7WebCore7IntRectERKN3WTF6StringEESt5tupleIJS5_S9_EEEEvPT_MT0_T1_OT2_EUlDpOT_E_SE_EDcOSF_OSH_ (__f=..., __t=...) at /usr/include/c++/12.2.0/tuple:1863
#20 0x00007f896c443d03 in IPC::callMemberFunction<WebKit::WebPageProxy, WebKit::WebPageProxy, void (WebCore::IntRect const&, WTF::String const&), std::tuple<WebCore::IntRect, WTF::String> >(WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(WebCore::IntRect const&, WTF::String const&), std::tuple<WebCore::IntRect, WTF::String>&&) (object=0x7f894d011200, function=(void (WebKit::WebPageProxy::*)(class WebKit::WebPageProxy * const, const class WebCore::IntRect &, const class WTF::String &)) 0x7f896d702aa8 <WebKit::WebPageProxy::showValidationMessage(WebCore::IntRect const&, WTF::String const&)>, tuple=...) at /app/webkit/Source/WebKit/Platform/IPC/HandleMessage.h:134
#21 0x00007f896c4308e9 in IPC::handleMessage<Messages::WebPageProxy::ShowValidationMessage, WebKit::WebPageProxy, WebKit::WebPageProxy, void (WebCore::IntRect const&, WTF::String const&)>(IPC::Connection&, IPC::Decoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(WebCore::IntRect const&, WTF::String const&)) (connection=..., decoder=..., object=0x7f894d011200, function=(void (WebKit::WebPageProxy::*)(class WebKit::WebPageProxy * const, const class WebCore::IntRect &, const class WTF::String &)) 0x7f896d702aa8 <WebKit::WebPageProxy::showValidationMessage(WebCore::IntRect const&, WTF::String const&)>) at /app/webkit/Source/WebKit/Platform/IPC/HandleMessage.h:236
#22 0x00007f896c426316 in WebKit::WebPageProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) (this=0x7f894d011200, connection=..., decoder=...) at /app/webkit/WebKitBuild/Debug/DerivedSources/WebKit/WebPageProxyMessageReceiver.cpp:328
#23 0x00007f896cf7055e in IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&) (this=0x7f894d034190, connection=..., decoder=...) at /app/webkit/Source/WebKit/Platform/IPC/MessageReceiverMap.cpp:129
#24 0x00007f896d07b37a in WebKit::AuxiliaryProcessProxy::dispatchMessage(IPC::Connection&, IPC::Decoder&) (this=0x7f894d0340e0, connection=..., decoder=...) at /app/webkit/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp:278
#25 0x00007f896d2a96ee in WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) (this=0x7f894d0340e0, connection=..., decoder=...) at /app/webkit/Source/WebKit/UIProcess/WebProcessProxy.cpp:1041
#26 0x00007f896cf45d65 in IPC::Connection::dispatchMessage(IPC::Decoder&) (this=0x7f894d078ba0, decoder=...) at /app/webkit/Source/WebKit/Platform/IPC/Connection.cpp:1233
#27 0x00007f896cf45fb0 in IPC::Connection::dispatchMessage(std::unique_ptr<IPC::Decoder, std::default_delete<IPC::Decoder> >) (this=0x7f894d078ba0, message=std::unique_ptr<IPC::Decoder> = {...}) at /app/webkit/Source/WebKit/Platform/IPC/Connection.cpp:1281
#28 0x00007f896cf4671c in IPC::Connection::dispatchIncomingMessages() (this=0x7f894d078ba0) at /app/webkit/Source/WebKit/Platform/IPC/Connection.cpp:1391
#29 0x00007f896cf45968 in operator()() const (__closure=0x7f894d0dc748) at /app/webkit/Source/WebKit/Platform/IPC/Connection.cpp:1191
#30 0x00007f896cf4d142 in WTF::Detail::CallableWrapper<IPC::Connection::enqueueIncomingMessage(std::unique_ptr<IPC::Decoder>)::<lambda()>, void>::call(void) (this=0x7f894d0dc740) at /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Function.h:53
#31 0x00007f8961502ee3 in WTF::Function<void ()>::operator()() const (this=0x7ffe5feec660) at /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Function.h:82
#32 0x00007f8962b6a72b in WTF::RunLoop::performWork() (this=0x7f894d01c0c0) at /app/webkit/Source/WTF/wtf/RunLoop.cpp:147
#33 0x00007f8962c1dcc0 in operator()(gpointer) const (__closure=0x0, userData=0x7f894d01c0c0) at /app/webkit/Source/WTF/wtf/glib/RunLoopGLib.cpp:80
#34 0x00007f8962c1dce4 in _FUN(gpointer) () at /app/webkit/Source/WTF/wtf/glib/RunLoopGLib.cpp:82
#35 0x00007f8962c1dc53 in operator()(GSource*, GSourceFunc, gpointer) const (__closure=0x0, source=0x560823dd5920, callback=0x7f8962c1dcc7 <_FUN(gpointer)>, userData=0x7f894d01c0c0) at /app/webkit/Source/WTF/wtf/glib/RunLoopGLib.cpp:53
#36 0x00007f8962c1dca1 in _FUN(GSource*, GSourceFunc, gpointer) () at /app/webkit/Source/WTF/wtf/glib/RunLoopGLib.cpp:56
#37 0x00007f8973f94527 in g_main_dispatch (context=0x560823597fb0) at ../glib/gmain.c:3460
#38 g_main_context_dispatch (context=0x560823597fb0) at ../glib/gmain.c:4200
#39 0x00007f8973ff1888 in g_main_context_iterate.constprop.0 (context=0x560823597fb0, block=<optimized out>, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4276
#40 0x00007f8973f93d7f in g_main_loop_run (loop=0x560823dd5900) at ../glib/gmain.c:4479
#41 0x00007f8962c1e314 in WTF::RunLoop::run() () at /app/webkit/Source/WTF/wtf/glib/RunLoopGLib.cpp:108
#42 0x0000560822be17d4 in WTR::TestController::platformRunUntil(bool&, WTF::Seconds) (this=0x7ffe5feed560, done=@0x7f894d030a23: false, timeout=...) at /app/webkit/Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:79
#43 0x0000560822b6f68f in WTR::TestController::runUntil(bool&, WTF::Seconds) (this=0x7ffe5feed560, done=@0x7f894d030a23: false, timeout=...) at /app/webkit/Tools/WebKitTestRunner/TestController.cpp:1755
#44 0x0000560822bb09a9 in WTR::TestInvocation::invoke() (this=0x7f894d0307c0) at /app/webkit/Tools/WebKitTestRunner/TestInvocation.cpp:180
#45 0x0000560822b6f349 in WTR::TestController::runTest(char const*) (this=0x7ffe5feed560, inputLine=0x7ffe5feeccc0 "/app/webkit/LayoutTests/fast/forms/scroll-into-view-and-show-validation-message.html'--timeout'30000") at /app/webkit/Tools/WebKitTestRunner/TestController.cpp:1685
#46 0x0000560822b6f545 in WTR::TestController::runTestingServerLoop() (this=0x7ffe5feed560) at /app/webkit/Tools/WebKitTestRunner/TestController.cpp:1731
#47 0x0000560822b6f5ba in WTR::TestController::run() (this=0x7ffe5feed560) at /app/webkit/Tools/WebKitTestRunner/TestController.cpp:1739
#48 0x0000560822b69500 in WTR::TestController::TestController(int, char const**) (this=0x7ffe5feed560, argc=26, argv=0x7ffe5feedac8) at /app/webkit/Tools/WebKitTestRunner/TestController.cpp:194
#49 0x0000560822bea0b3 in main(int, char**) (argc=26, argv=0x7ffe5feedac8) at /app/webkit/Tools/WebKitTestRunner/gtk/main.cpp:69
STDERR: (process:30): Gdk-CRITICAL **: 07:44:54.063: gdk_monitor_get_geometry: assertion 'GDK_IS_MONITOR (monitor)' failed
I have my music library on a different server, via samba, so playback starts a little tad slower than if playing music locally. That seem to have caused a slight race that triggered this:
What happens is that song A gets removed, instead of B. The context-menu seems to be stateless and to act on the currently selected item, even if that's not the item where the context-menu was brought up. Because the playback starts a bit slow, it's easy to reproduce for me, but if you play music locally it might be more difficult.
version is 3.4.7 from debian testing.
I'd also try to change filtering from "All messages" to something else and then back, whether it'll do anything good.
Nope, that doesn't do anything. Same if you search for something and then remove the search terms.
You can also right-click the selected folder and pick Refresh, which may or may not help without restarting the application.
Doesn't do any difference.
I can reproduce this with 3.46.1 as well.
Sorry for the delay. I recently learned that there was an upgrade in our IMAP server, so I suspect that this might be triggering the bug.
The upgrade went as follows:
upgrade dovecot-imapd:i386 1:2.2.13-12~deb8u7 1:2.2.27-3+deb9u7 and upgrade dovecot-imapd:i386 1:2.2.27-3+deb9u7 1:2.3.4.1-5+deb10u6, so we went from 2.2.13 to 2.3.4.1, ie the versions in jessie and buster.
For what it's worth, this is happening to me as well as of recently, and I have a Mesa IntelĀ® Xe Graphics (TGL GT2). GNOME 43.1, Wayland, Debian testing. Meta + L power off the external display (connected via docking station and DisplayPort), after ~15 seconds the display comes back in blank mode, then after a while it goes to saving mode, then again comes back to blank and so forth.
Sorry, I missed the email about this. Unlocked now :)
This has been happening for some weeks, randomly all messages in my INBOX folder dissapear, and then the only way to get them back is to close and restart evolution.
ii evolution 3.46.1-1 amd64 groupware suite with mail client and organizer
ii evolution-common 3.46.1-1 all architecture independent files for Evolution
ii evolution-data-server 3.46.1-1 amd64 evolution database backend server
ii evolution-data-server-common 3.46.1-1 all architecture independent files for Evolution Data Server
ii evolution-plugin-bogofilter 3.46.1-1 amd64 standard plugins for Evolution (bogofilter)
ii evolution-plugin-pstimport 3.46.1-1 amd64 standard plugins for Evolution (pstimport)
ii evolution-plugins 3.46.1-1 amd64 standard plugins for Evolution
ii libebackend-1.2-11:amd64 3.46.1-1 amd64 Utility library for evolution data servers
ii libebook-1.2-21:amd64 3.46.1-1 amd64 Client library for evolution address books
ii libebook-contacts-1.2-4:amd64 3.46.1-1 amd64 Client library for evolution contacts books
ii libecal-2.0-2:amd64 3.46.1-1 amd64 Client library for evolution calendars
ii libedata-book-1.2-27:amd64 3.46.1-1 amd64 Backend library for evolution address books
ii libedata-cal-2.0-2:amd64 3.46.1-1 amd64 Backend library for evolution calendars
ii libedataserver-1.2-27:amd64 3.46.1-1 amd64 Utility library for evolution data servers
ii libedataserverui-1.2-4:amd64 3.46.1-1 amd64 Utility library for evolution data servers
ii libedataserverui4-1.0-0:amd64 3.46.1-1 amd64 GTK4 utility library for evolution data servers
ii libevolution 3.46.1-1 amd64 evolution libraries