Application sometimes not starting on Linux Topic is solved

Do you have a typical platform dependent issue you're battling with ? Ask it here. Make sure you mention your platform, compiler, and wxWidgets version.
iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Application sometimes not starting on Linux

Post by iwbnwif » Thu Mar 28, 2013 7:22 pm

I am using wxWidgets 2.9.4 shared library, unicode, release build on Ubuntu 12.10.

Approximately 30% of the time wxWidgets applications do not start.

This applies to both the wxWidgets sample applications run from the command line and applications I have developed myself run from within Codelite.

Unfortunately I don't know where to start debugging this problem. So far I have tried putting std::cout << statements into the "MainApp" (wxApp subclass) constructor and this is always run, however the next std::cout << statement at the start of the "MainFrame" (wxFrame subclass) is not run.

Therefore I can only conclude that it is something in the wxFrame constructor causing the problem.

The trouble is that this almost never happens when I use the debugger. I say 'almost' because it may have happened once or twice but I put it down to a coding error I was investigating.

Thanks for advice!
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

eranif
Moderator
Moderator
Posts: 607
Joined: Tue Nov 29, 2005 7:10 pm
Location: Israel

Re: Application sometimes not starting on Linux

Post by eranif » Sun Mar 31, 2013 7:36 pm

iwbnwif wrote:Approximately 30% of the time wxWidgets applications do not start.
What do you mean by "do not start" ?

Do they crash? or simply hangs?
Try running your application under gdb from within codelite, place a breakpoint at the last line of the wxFrame constructor - when your application hangs, "pause" the application from within codelite and check the "Call Stack" window that should give you a hint where your application is spending time...

Eran
IDE: CodeLite + wxCrafter
OS: All
https://wxcrafter.codelite.org
https://codelite.org

iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Re: Application sometimes not starting on Linux

Post by iwbnwif » Sun Mar 31, 2013 10:00 pm

Thanks Eran.

I mean "simply hang". All initialisation (including construction of a static instance of a class) is completed. I have put several std::cout << at various points and the last one which gets displayed is always the one immediately prior to the MainFrame ctor call in main.cpp.

Actually I had already tried this several times but it seems just the fact of having a breakpoint in the MainFrame ctor stops it from hanging. I should stress also that the same thing happens with the wxWidgets samples.

Anyway inspired by your suggestion I created a new class that is never initialised and put a breakpoint in there and was able to press the pause button when it hung. This is the result copied from the call stack window:

Code: Select all

0  0xb7fdd424  __kernel_vsyscall    
1  0xb6dff5a2  __lll_lock_wait    
2  0xb6dfaecb  _L_lock_891    
3  0xb6dfae60  pthread_mutex_lock    
4  0xb625ced0  g_mutex_lock    
5  0xb5d989a1  ??    
6  0xb5d239b2  g_initable_init    
7  0xb5d9939a  g_bus_get_sync    
8  0xb4e2919a  ??    
9  0xb642d1e4  g_type_create_instance    
10  0xb640f6b1  ??    
11  0xb6411399  g_object_newv    
12  0xb6411938  g_object_new    
13  0xb5d26fcb  ??    
14  0xb5d27180  ??    
15  0xb5d54f9d  g_vfs_get_default    
16  0xb5d11583  g_file_new_for_path    
17  0xb4cd9ae1  ??    
18  0xb642d1e4  g_type_create_instance    
19  0xb640f6b1  ??    
20  0xb4cc48df  ??    
21  0xb4cd7c68  ??    
22  0xb6411399  g_object_newv    
23  0xb6411938  g_object_new    
24  0xb4cd7cd2  ibus_bus_new    
25  0xb57209ca  ??    
26  0xb642a472  g_type_class_ref    
27  0xb641146e  g_object_newv    
28  0xb6411938  g_object_new    
29  0xb572162b  ibus_im_context_new    
30  0xb571f162  im_module_create    
31  0xb6617886  _gtk_im_module_create  /build/buildd/gtk+2.0-2.24.13/gtk/gtkimmodule.c  614
32  0xb6618366  gtk_im_multicontext_get_slave  /build/buildd/gtk+2.0-2.24.13/gtk/gtkimmulticontext.c  254
33  0xb66183ad  gtk_im_multicontext_set_use_preedit  /build/buildd/gtk+2.0-2.24.13/gtk/gtkimmulticontext.c  410
34  0xb661556f  IA__gtk_im_context_set_use_preedit  /build/buildd/gtk+2.0-2.24.13/gtk/gtkimcontext.c  581
35  0xb732ae7c  wxWindow::PostCreation  ../src/gtk/window.cpp  2496
36  0xb73234f8  wxTopLevelWindowGTK::Create  ../src/gtk/toplevel.cpp  622
37  0xb737d363  wxFrame::Create  ../src/gtk/frame.cpp  56
38  0x080b8ab6  wxFrame::wxFrame  /usr/include/wx-2.9-unofficial/wx/gtk/frame.h  32
39  0x080b30f3  MainFrameBase::MainFrameBase  /home/iwbnwif/Experimental/wxtest/test/svntest/wxCrafter.cpp  17
40  0x0805a3c7  MainFrame::MainFrame  /home/iwbnwif/Experimental/wxtest/test/svntest/MainFrame.cpp  44
41  0x0805a1e4  MainApp::OnInit  /home/iwbnwif/Experimental/wxtest/test/svntest/main.cpp  24
42  0x08059ce0  wxAppConsoleBase::CallOnInit  /usr/include/wx-2.9-unofficial/wx/app.h  94
43  0xb701b6b3  wxEntry  ../src/common/init.cpp  456
44  0xb701b766  wxEntry  ../src/common/init.cpp  484
45  0x080596e7  main  /home/iwbnwif/Experimental/wxtest/test/svntest/main.cpp  33
If I start the debugger again the application continues to hang (my apologies if that sounds like an oxymoron!)

If I pause again the call stack varies, but always ends in a __kernel_vsyscall, for example:

Code: Select all

0  0xb7fdd424  __kernel_vsyscall    
1  0xb6d27690  poll    
2  0xb622a74b  g_poll    
3  0xb621bd00  ??    
4  0xb621c1db  g_main_loop_run    
5  0xb5da5b7a  ??    
6  0xb6241303  ??    
7  0xb6df8d4c  start_thread    
8  0xb6d35dde  clone    
I have googled about this a bit to try to work out what is happening and then I found this http://trac.wxwidgets.org/ticket/11133 however although the symptoms are the same, I don't think that the cause is related.

I am using Ubuntu 12.10 with the Codelite build of wxWidgets.
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Re: Application sometimes not starting on Linux

Post by iwbnwif » Mon Apr 01, 2013 7:53 am

Okay, I have solved this, or at least found an effective workaround.

I have added a

Code: Select all

wxMilliSleep(10);
before the MainFrame constructor is called.

The reason for trying this is that large wxWidgets programs such as Codelight and FlameRobin never fail to start but smaller ones like my application and the samples often exhibit this problem.

If someone understands the reason this is happening I would be interested to know.
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

DavidHart
Site Admin
Site Admin
Posts: 4002
Joined: Thu Jan 12, 2006 6:23 pm
Location: IoW, UK

Re: Application sometimes not starting on Linux

Post by DavidHart » Mon Apr 01, 2013 10:01 am

Hi,
If someone understands the reason this is happening I would be interested to know.
Presumably this is somehow a timing issue, which would also explain why it doesn't happen when run in a debugger.

What happens if you run the (unaltered) wx samples from a terminal? Do you still get the hang then? If not, it suggests there might be an issue with the way CodeLite runs an app.

Regards,

David

iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Re: Application sometimes not starting on Linux

Post by iwbnwif » Mon Apr 01, 2013 11:13 am

Yes I agree its a timing issue. Actually I had to increase the wxMilliSleep value to 100 because I was still getting occasional hangs with it set at 10.

The samples do hang from the command line (I haven't tried running them inside Codelite).
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

DavidHart
Site Admin
Site Admin
Posts: 4002
Joined: Thu Jan 12, 2006 6:23 pm
Location: IoW, UK

Re: Application sometimes not starting on Linux

Post by DavidHart » Mon Apr 01, 2013 11:26 am

The samples do hang from the command line
That's surprising. Is there anything unusual about your ubuntu installation, or your hardware? Which DE do you use?

iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Re: Application sometimes not starting on Linux

Post by iwbnwif » Mon Apr 01, 2013 11:43 am

Nothing really unusual it is a stock 12.10 Ubuntu (i.e. not Kubuntu etc.).

The DE is the standard Unity - I don't think you can change it.

Its an Dell Optiplex 755. I do have two 22" monitors (big desktop mode) and have installed the closed source ATI driver.
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

DavidHart
Site Admin
Site Admin
Posts: 4002
Joined: Thu Jan 12, 2006 6:23 pm
Location: IoW, UK

Re: Application sometimes not starting on Linux

Post by DavidHart » Mon Apr 01, 2013 12:57 pm

The DE is the standard Unity - I don't think you can change it.
You certainly can! There are lots of saner alternatives: look in synaptic. kde (the kde-standard package) is a commonly-used one; but for ubuntu I use lxde, which is usable yet light.

However I did just test the minimal sample in unity too. It worked without a problem in both DEs.

The only thing I can think of, if it's not too inconvenient, is to try 'minimal' with just a single monitor.

iwbnwif
Super wx Problem Solver
Super wx Problem Solver
Posts: 274
Joined: Tue Mar 19, 2013 8:52 pm

Re: Application sometimes not starting on Linux

Post by iwbnwif » Mon Apr 01, 2013 3:47 pm

:lol: yes of course you are right that there are other options. What I meant was that the old Gnome desktop was available any more.

I disabled on monitor using the ATI control panel and still get the hang. I did think about creating a VM and testing things in there but if it is a timing issue I am not sure that would help.

I think it is a threading issue and looks a lot like livelock (but I know very little about threads and nothing about how wxWidgets uses them under the hood).

If I run 'htop' and track my application name, with a normal start I get 8 threads but when it hangs there are only two.

Actually I am quite happy to call this 'solved' because at best it has been an annoyance during development and now I can have a reasonable workaround it doesn't feel like a problem any more :)
wxWidgets 3.1.2, MinGW64 8.1.0, g++ 8.1.0, Ubuntu 19.04, Windows 10, CodeLite + wxCrafter
Some people, when confronted with a GUI problem, think "I know, I'll use Eclipse RCP". Now they have two problems.

ryanjmulder
In need of some credit
In need of some credit
Posts: 3
Joined: Wed Apr 16, 2014 5:30 pm

Re: Application sometimes not starting on Linux

Post by ryanjmulder » Wed Apr 16, 2014 5:40 pm

I am having the same (or similar) issue on Ubuntu 13.10 with gtk2 and wxwidgets3.

Frequently when I launch my small app it hangs before showing the main frame.

Unfortunately the wxMillisleep( 100 ) workaround did not help for me. I tried other values for the sleep, which either had no effect or made it worse.

I'm at a loss to work around this in my code, and I don't fully understand the problem.
Any advice would be greatly appreciated.

I attached gdb to the hung app and dumped this backtrace:

Code: Select all

#0  __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
#1  0x00007f299860b192 in _L_lock_1142 () from /lib/x86_64-linux-gnu/libpthread.so.0
#2  0x00007f299860b110 in __GI___pthread_mutex_lock (mutex=0x7f29880011b0) at pthread_mutex_lock.c:104
#3  0x00007f29967f73a1 in g_mutex_lock () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007f299450e9b0 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#5  0x00007f2994513edb in g_bus_get_sync () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#6  0x00007f298d29e4f8 in ?? () from /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so
#7  0x00007f2996f0cc3b in g_type_create_instance () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007f2996ef10e5 in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007f2996ef2edd in g_object_newv () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#10 0x00007f2996ef368c in g_object_new () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#11 0x00007f29944ae6e1 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#12 0x00007f29944ae860 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#13 0x00007f299449b54e in g_file_new_for_path () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#14 0x00007f298d4e3b8d in ?? () from /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5
#15 0x00007f2996f0cc3b in g_type_create_instance () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007f2996ef0cc8 in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007f298d4e6325 in ?? () from /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5
#18 0x00007f2996ef1074 in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007f2996ef3294 in g_object_new_valist () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007f2996ef3674 in g_object_new () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007f298d4e41e6 in ibus_bus_new_async () from /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5
#22 0x00007f298d71e28a in ?? () from /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so
#23 0x00007f2996f0a34e in g_type_class_ref () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007f2996ef2f29 in g_object_newv () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007f2996ef368c in g_object_new () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#26 0x00007f298d71ece2 in ibus_im_context_new () from /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so
#27 0x00007f29974f54ee in _gtk_im_module_create (context_id=<optimized out>) at /build/buildd/gtk+2.0-2.24.20/gtk/gtkimmodule.c:614
#28 0x00007f29974f5dd9 in gtk_im_multicontext_get_slave ([email protected]=0x7f2988002330) at /build/buildd/gtk+2.0-2.24.20/gtk/gtkimmulticontext.c:254
#29 0x00007f29974f5e10 in gtk_im_multicontext_set_use_preedit (context=0x7f2988002330, use_preedit=0) at /build/buildd/gtk+2.0-2.24.20/gtk/gtkimmulticontext.c:410
#30 0x00007f2999384e3e in wxWindow::PostCreation (this=0x2130cd0) at ../src/gtk/window.cpp:2542
#31 0x00007f299937c4e0 in wxTopLevelWindowGTK::Create ([email protected]=0x2130cd0, [email protected]=0x0, [email protected]=-1, title=..., pos=..., sizeOrig=..., style=541597248, name=...)
    at ../src/gtk/toplevel.cpp:662
#32 0x00007f29993cbfb5 in wxFrame::Create ([email protected]=0x2130cd0, [email protected]=0x0, [email protected]=-1, title=..., pos=..., sizeOrig=..., [email protected]=541597248, name=...)
    at ../src/gtk/frame.cpp:56
#33 0x000000000043021c in wxFrame (name=..., style=541597248, size=..., pos=..., title=..., id=-1, parent=0x0, this=0x2130cd0) at /usr/include/wx-3.0/wx/gtk/frame.h:31
#34 DatBrowserFrameBase::DatBrowserFrameBase (this=0x2130cd0, parent=0x0, id=-1, title=..., pos=..., size=..., style=541597248) at /home/administrator/Source/datbrowser/DatBrowser_GUI.cpp:20
#35 0x0000000000427696 in DatBrowserFrame::DatBrowserFrame (this=0x2130cd0) at /home/administrator/Source/datbrowser/DatBrowserFrame.cpp:167
#36 0x0000000000437a11 in DatBrowser::CreateFrame ([email protected]=0x20990b0) at /home/administrator/Source/datbrowser/datbrowser.cpp:64
#37 0x00000000004380fe in DatBrowser::OnInit (this=0x20990b0) at /home/administrator/Source/datbrowser/datbrowser.cpp:41
#38 0x00007f299891212c in wxEntry ([email protected]: 1, argv=<optimized out>) at ../src/common/init.cpp:479
#39 0x00007f29989121d2 in wxEntry ([email protected][email protected]: 1, argv=<optimized out>) at ../src/common/init.cpp:507
#40 0x000000000041c078 in main (argc=1, argv=<optimized out>) at /home/administrator/Source/datbrowser/datbrowser.cpp:17
I also ran the app through valgrind's helgrind tool, which produced this output:

Code: Select all

==5631== Helgrind, a thread error detector
==5631== Copyright (C) 2007-2012, and GNU GPL'd, by OpenWorks LLP et al.
==5631== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==5631== Command: bin/datbrowser
==5631== 
==5631== ---Thread-Announcement------------------------------------------
==5631== 
==5631== Thread #1 is the program's root thread
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #1: pthread_cond_destroy: destruction of unknown cond var
==5631==    at 0x4C2D7F8: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0xCDDCE09: ??? (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
==5631==    by 0xCDDCED1: xcb_wait_for_reply (in /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0)
==5631==    by 0x90084E6: _XReply (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==5631==    by 0x8FFE983: XQueryExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==5631==    by 0x8FF2C31: XInitExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==5631==    by 0x905B123: XkbUseExtension (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==5631==    by 0x8FF9302: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==5631==    by 0x83A8E75: gdk_display_open (gdkdisplay-x11.c:166)
==5631==    by 0x8379F5C: gdk_display_open_default_libgtk_only (gdk.c:324)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== ---Thread-Announcement------------------------------------------
==5631== 
==5631== Thread #2 was created
==5631==    at 0x774E98E: clone (clone.S:76)
==5631==    by 0x6F23F24: do_clone.constprop.4 (createthread.c:74)
==5631==    by 0x6F2564D: [email protected]@GLIBC_2.2.5 (createthread.c:244)
==5631==    by 0x4C2E870: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D53881: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D383CE: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D3847A: g_thread_new (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A66: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x11813B1C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x11811EB3: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8623119: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xFF4A3E0: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/liboverlay-scrollbar.so)
==5631==    by 0x7E630F0: default_display_notify_cb (gtkmodules.c:445)
==5631==    by 0x861E187: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862FB1C: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637828: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637AE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622504: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624ABA: g_object_notify (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8379F74: gdk_display_open_default_libgtk_only (gdk.c:335)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Lock at 0xF39D340 was first observed
==5631==    at 0x4C2F8EA: pthread_mutex_init (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D53087: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D53368: g_mutex_init (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xB03D80C: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x86230E4: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xB040A56: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EDA: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x11813834: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x1181395C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D133B5: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D13707: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D137AB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A9C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D380F4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x4C2EA06: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6F24F6D: start_thread (pthread_create.c:311)
==5631==    by 0x774E9CC: clone (clone.S:113)
==5631== 
==5631== Lock at 0xF259040 was first observed
==5631==    at 0x4C2DC45: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D5314C: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D531A4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D53508: g_rw_lock_writer_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8619321: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x400F855: call_init.part.0 (dl-init.c:84)
==5631==    by 0x400F90F: _dl_init (dl-init.c:55)
==5631==    by 0x4001669: ??? (in /lib/x86_64-linux-gnu/ld-2.17.so)
==5631== 
==5631== Lock at 0xF2E75A0 was first observed
==5631==    at 0x4C2F8EA: pthread_mutex_init (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D53012: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8CE600A: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D53480: g_rec_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x837CE44: gdk_display_manager_get (gdkdisplaymanager.c:166)
==5631==    by 0x7E6385F: _gtk_modules_init (gtkmodules.c:533)
==5631==    by 0x7E4AB6A: post_parse_hook (gtkmain.c:778)
==5631==    by 0x8D1E5B6: g_option_context_parse (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x7E4B09D: gtk_parse_args (gtkmain.c:970)
==5631==    by 0x7E4B0F8: gtk_init_check (gtkmain.c:1006)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== Lock at 0xF3A1F80 was first observed
==5631==    at 0x4C2F8EA: pthread_mutex_init (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6C46589: wxMutexInternal::wxMutexInternal(wxMutexType) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6C468D1: wxMutex::wxMutex(wxMutexType) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6C47B4B: wxThreadModule::OnInit() (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6BA9FE1: wxModule::DoInitializeModule(wxModule*, wxModuleList&) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6BAC06D: wxModule::InitializeModules() (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8B6D9: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== Possible data race during read of size 4 at 0xF3D345C by thread #2
==5631== Locks held: 1, at address 0xF39D340
==5631==    at 0x863C59F: g_type_class_peek_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624D38: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xB0513E8: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB04574E: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EF2: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x11813834: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x1181395C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D133B5: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D13707: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D137AB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A9C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D380F4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x4C2EA06: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6F24F6D: start_thread (pthread_create.c:311)
==5631==    by 0x774E9CC: clone (clone.S:113)
==5631== 
==5631== This conflicts with a previous write of size 4 by thread #1
==5631== Locks held: 3, at addresses 0xF259040 0xF2E75A0 0xF3A1F80
==5631==    at 0x863C366: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12440B2E: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631== 
==5631== Address 0xF3D345C is 12 bytes inside a block of size 80 alloc'd
==5631==    at 0x4C2C514: calloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D18E28: g_malloc0 (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8639E63: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x863DF08: g_type_register_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x863DF9C: g_type_register_static_simple (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFBB04D: g_cancellable_get_type (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFBB148: g_cancellable_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x12440B2E: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x124411E5: ibus_bus_new_async (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x1221E289: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x863C34D: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #1: lock order "0xF3632B0 before 0xF2E75A0" violated
==5631== 
==5631== Observed (incorrect) order is: acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF3632B0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0xAFE0752: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFCD54D: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x12440B8C: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x124411E5: ibus_bus_new_async (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x1221E289: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x863C34D: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== Required order was established by acquisition of lock at 0xF3632B0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0xAFE0752: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB02D68D: g_settings_backend_get_default (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB0300AA: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x8623119: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xFF4A3E0: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/liboverlay-scrollbar.so)
==5631==    by 0x7E630F0: default_display_notify_cb (gtkmodules.c:445)
==5631==    by 0x861E187: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862FB1C: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637828: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637AE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622504: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624ABA: g_object_notify (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8379F74: gdk_display_open_default_libgtk_only (gdk.c:335)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFDF98E: g_io_module_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFDFDD6: g_io_modules_scan_all_in_directory_with_scope (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE019B: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE077F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB02D68D: g_settings_backend_get_default (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB0300AA: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x8623119: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xFF4A3E0: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/liboverlay-scrollbar.so)
==5631==    by 0x7E630F0: default_display_notify_cb (gtkmodules.c:445)
==5631==    by 0x861E187: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862FB1C: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637828: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637AE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622504: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624ABA: g_object_notify (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8379F74: gdk_display_open_default_libgtk_only (gdk.c:335)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #1: lock order "0xF365DF0 before 0xF2E75A0" violated
==5631== 
==5631== Observed (incorrect) order is: acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF365DF0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D533A0: g_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xAFE0104: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE077F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFCD54D: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x12440B8C: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x124411E5: ibus_bus_new_async (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x1221E289: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x863C34D: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== Required order was established by acquisition of lock at 0xF365DF0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D533A0: g_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xAFE0104: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE077F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB02D68D: g_settings_backend_get_default (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB0300AA: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x8623119: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xFF4A3E0: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/liboverlay-scrollbar.so)
==5631==    by 0x7E630F0: default_display_notify_cb (gtkmodules.c:445)
==5631==    by 0x861E187: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862FB1C: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637828: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637AE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622504: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624ABA: g_object_notify (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8379F74: gdk_display_open_default_libgtk_only (gdk.c:335)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFDF98E: g_io_module_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFDFDD6: g_io_modules_scan_all_in_directory_with_scope (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE019B: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE077F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB02D68D: g_settings_backend_get_default (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB0300AA: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x8623119: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xFF4A3E0: gtk_module_init (in /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/liboverlay-scrollbar.so)
==5631==    by 0x7E630F0: default_display_notify_cb (gtkmodules.c:445)
==5631==    by 0x861E187: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862FB1C: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637828: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8637AE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622504: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624ABA: g_object_notify (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8379F74: gdk_display_open_default_libgtk_only (gdk.c:335)
==5631==    by 0x7E4B103: gtk_init_check (gtkmain.c:1009)
==5631==    by 0x60DBBE3: wxApp::Initialize(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x6B8B531: wxEntryStart(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C09B: wxInitialize(int, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x6B8C0EC: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #1: lock order "0xF3BB7F0 before 0xF2E75A0" violated
==5631== 
==5631== Observed (incorrect) order is: acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863BF11: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x43021B: DatBrowserFrameBase::DatBrowserFrameBase(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long) (frame.h:31)
==5631==    by 0x427695: DatBrowserFrame::DatBrowserFrame() (DatBrowserFrame.cpp:167)
==5631==    by 0x437A10: DatBrowser::CreateFrame() (datbrowser.cpp:64)
==5631==    by 0x4380FD: DatBrowser::OnInit() (datbrowser.cpp:41)
==5631==    by 0x6B8C12B: wxEntry(int&, wchar_t**) (in /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.0.0)
==5631==    by 0x41C077: main (datbrowser.cpp:17)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF3BB7F0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D533A0: g_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xB0409AF: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EDA: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x126834F7: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x86230E4: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624EDC: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFE06E0: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE085F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFCD54D: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x12440B8C: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x124411E5: ibus_bus_new_async (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x1221E289: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x863C34D: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631==    by 0x7E36E0F: gtk_im_multicontext_set_use_preedit (gtkimmulticontext.c:410)
==5631==    by 0x6108E3D: wxWindow::PostCreation() (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631==    by 0x61004DF: wxTopLevelWindowGTK::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) (in /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.0.0)
==5631== 
==5631== Required order was established by acquisition of lock at 0xF3BB7F0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D533A0: g_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xB0409AF: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EDA: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x11813834: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x1181395C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D133B5: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D13707: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D137AB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A9C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D380F4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x4C2EA06: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6F24F6D: start_thread (pthread_create.c:311)
==5631==    by 0x774E9CC: clone (clone.S:113)
==5631== 
==5631==  followed by a later acquisition of lock at 0xF2E75A0
==5631==    at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863F07B: g_type_add_interface_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xB03EABB: g_dbus_connection_get_type (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB040A1E: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EDA: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x11813834: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x1181395C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D133B5: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D13707: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D137AB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A9C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D380F4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x4C2EA06: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6F24F6D: start_thread (pthread_create.c:311)
==5631==    by 0x774E9CC: clone (clone.S:113)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #1: Exiting thread still holds 3 locks
==5631==    at 0x6F2B80C: __lll_lock_wait (lowlevellock.S:135)
==5631==    by 0x6F27191: _L_lock_1142 (pthread_mutex_lock.c:120)
==5631==    by 0x6F2710E: pthread_mutex_lock (pthread_mutex_lock.c:104)
==5631==    by 0x4C2FB62: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x8D533A0: g_mutex_lock (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0xB04558E: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EF2: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x126834F7: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x86230E4: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624EDC: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFE06E0: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFE085F: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xAFCD54D: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x12440B8C: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x863EC3A: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8622CC7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x12443324: ??? (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x8623073: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625293: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8625673: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x124411E5: ibus_bus_new_async (in /usr/lib/x86_64-linux-gnu/libibus-1.0.so.5.0.503)
==5631==    by 0x1221E289: ??? (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x863C34D: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x8624F28: g_object_newv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x862568B: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0x1221ECE1: ibus_im_context_new (in /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)
==5631==    by 0x7E364ED: _gtk_im_module_create (gtkimmodule.c:614)
==5631==    by 0x7E36DD8: gtk_im_multicontext_get_slave (gtkimmulticontext.c:254)
==5631== 
==5631== ----------------------------------------------------------------
==5631== 
==5631== Thread #2: Exiting thread still holds 1 lock
==5631==    at 0x6F2B80C: __lll_lock_wait (lowlevellock.S:135)
==5631==    by 0x6F27176: _L_lock_1035 (pthread_mutex_lock.c:120)
==5631==    by 0x6F27007: pthread_mutex_lock (pthread_mutex_lock.c:85)
==5631==    by 0x4C2FB62: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x863F07B: g_type_add_interface_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3800.1)
==5631==    by 0xAFF1E83: g_simple_async_result_get_type (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB0515CC: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB04574E: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0xB045EF2: g_bus_get_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3800.1)
==5631==    by 0x11813834: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x1181395C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D133B5: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D13707: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x8D137AB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x11813A9C: ??? (in /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so)
==5631==    by 0x8D380F4: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1)
==5631==    by 0x4C2EA06: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==5631==    by 0x6F24F6D: start_thread (pthread_create.c:311)
==5631==    by 0x774E9CC: clone (clone.S:113)
==5631== 
==5631== 
==5631== For counts of detected and suppressed errors, rerun with: -v
==5631== Use --history-level=approx or =none to gain increased speed, at
==5631== the cost of reduced accuracy of conflicting-access information
==5631== ERROR SUMMARY: 131 errors from 7 contexts (suppressed: 622 from 222)

DavidHart
Site Admin
Site Admin
Posts: 4002
Joined: Thu Jan 12, 2006 6:23 pm
Location: IoW, UK

Re: Application sometimes not starting on Linux

Post by DavidHart » Wed Apr 16, 2014 6:45 pm

Hi,
I am having the same (or similar) issue
Well, yours is clearly a thread one; the OPs probably not (despite his last post; I suspect the threads he reported were CodeLite's ones, not in his program). Anyway:

It's hard to advise without seeing code, and preferably having a minimal compileable sample that shows the issue. First, the cardinal rule of wx threads: Don't touch the gui directly from any non-gui thread. Communicate with the gui asynchronously, using wxPostEvent() or one of the new-in-wx3 things e.g. CallAfter() or wxEvtHandler::QueueEvent.

If that's not relevant to your situation, perhaps you could give some information about what you do do with threads; in particular anything that happens before or during frame creation.

Finally, what happens when your app does start OK; does it continue to run, or might it hang later?

Regards,

David

ryanjmulder
In need of some credit
In need of some credit
Posts: 3
Joined: Wed Apr 16, 2014 5:30 pm

Re: Application sometimes not starting on Linux

Post by ryanjmulder » Fri Apr 18, 2014 9:22 pm

Hi David,
Thank you very much for your help.

I'm not using any threads at all in my app, which is one of the puzzling things about this.
When my app does start OK, it continues to run with no issues at all.

I created and attached a minimal sample, with updated backtrace and helgrind log.
The sample is so small that I can post it here, too:

Code: Select all

#include <wx/app.h>
#include <wx/frame.h>

class Hang : public wxApp
{
	bool OnInit();
};

IMPLEMENT_APP( Hang )

bool Hang::OnInit()
{	
	wxFrame* frame = new wxFrame( nullptr, wxID_ANY, "A Frame", wxDefaultPosition, wxSize( 800, 600 ) );
	frame->Show();
	return true;
}
When things work normally, the app shows an empty frame.
When things don't work, the frame never shows, but the process is running.
I cannot start the app 10 times in a row without it hanging.

When creating the minimal sample, I discovered that the hang is related to constructing the wxFrame with a size.
If I replace "wxSize( 800, 600 )" with "wxDefaultSize", it never hangs.

Also, it might be relevent that I'm working in a virtual machine, where everything is a bit slower than average.
It seems to happen less when running directly on hardware.

Thanks again for your help.
Attachments
hang.tar.gz
Minimal Sample
(5.19 KiB) Downloaded 66 times

DavidHart
Site Admin
Site Admin
Posts: 4002
Joined: Thu Jan 12, 2006 6:23 pm
Location: IoW, UK

Re: Application sometimes not starting on Linux

Post by DavidHart » Sat Apr 19, 2014 9:27 am

I'm not using any threads at all in my app, which is one of the puzzling things about this.
I see. I saw the threads in the backtrace, and helgrind, and... Presumably they're some internal gtk thing.

Your minimal sample is certainly minimal enough ;) . I ran it here, first on debian wheezy. When built with the standard wx3.0/gtk2, 10 runs -> no hang.
Built against wx3.0/gtk3, the second run hung.

However that was the only hang I managed to provoke. Dozens more of that build (with and without gdb), dozens against wx3.1/gtk3 and dozens against wx3.0/gtk3 in a fedora 19 vbox guest, all behaved perfectly.

I have no explanation, let alone a solution. It's borderline whether to make a bug-report on trac; you have the backtrace/helgrind output which would help, but the wx-devs most likely to get involved will also struggle to reproduce it (they use debian and fedora).

ryanjmulder
In need of some credit
In need of some credit
Posts: 3
Joined: Wed Apr 16, 2014 5:30 pm

Re: Application sometimes not starting on Linux

Post by ryanjmulder » Wed Apr 23, 2014 3:55 pm

Thanks very much for your help, David.
I did open a ticket on trac. Better that they have the information, even if they can't reproduce it.
I'm glad I found the workaround of constructing with wxDefaultSize, so I can happily release my app.

Post Reply