Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » Community » U++ community news and announcements » ide: Assist parsing now parallel and some of it background
ide: Assist parsing now parallel and some of it background [message #54308] Mon, 22 June 2020 16:08 Go to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Title says it all. The "background" part is the one that updates the information during editing the file, in the past it was causing some cursor movement delays, that should not happen anymore.

"Parallel" part means that e.g. loading the main package should be now quite faster. Fortunately, this is the type of parallelism that scales well with more cores, I am now getting 9 times speedup with 2700x....

Important warning: This was a big change and the whole code is quite fragile to make it fast; I doubt I have already caught all race conditions and deadlocks already. TheIDE will probably be unstable for some time now. Please report all bugs...

Mirek
Re: ide: Assist parsing now parallel and some of it background [message #54309 is a reply to message #54308] Mon, 22 June 2020 16:34 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
Thanks!
First bug report Smile
Compilation of examples/CodeMetric is broken.
/Users/ssg/.local/soft/bb-worker/worker/m-upp/build/examples/CodeMetric/Analyse.h:32:25: error: use of undeclared identifier 'Parser'; did you mean 'CParser'?
        void StoreMetric(const Parser::FunctionStat & functionStat);
                               ^~~~~~
                               CParser
/Users/ssg/.local/soft/bb-worker/worker/m-upp/build/uppsrc/Core/Parser.h:9:7: note: 'CParser' declared here
class CParser {


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54310 is a reply to message #54309] Mon, 22 June 2020 17:13 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Mon, 22 June 2020 16:34
Thanks!
First bug report Smile
Compilation of examples/CodeMetric is broken.
/Users/ssg/.local/soft/bb-worker/worker/m-upp/build/examples/CodeMetric/Analyse.h:32:25: error: use of undeclared identifier 'Parser'; did you mean 'CParser'?
        void StoreMetric(const Parser::FunctionStat & functionStat);
                               ^~~~~~
                               CParser
/Users/ssg/.local/soft/bb-worker/worker/m-upp/build/uppsrc/Core/Parser.h:9:7: note: 'CParser' declared here
class CParser {


I think at this point I will just drop that example... Does anything depend on that functionality?

Mirek
Re: ide: Assist parsing now parallel and some of it background [message #54312 is a reply to message #54310] Mon, 22 June 2020 17:23 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
mirek wrote on Mon, 22 June 2020 11:13

I think at this point I will just drop that example... Does anything depend on that functionality?

Mirek

I'm personally not using this functionality.
Compilation is tested by an automated build system.


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54313 is a reply to message #54312] Mon, 22 June 2020 19:34 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
I checked TheIDE with ThreadSanitizer and got a lot of data race warnings right on startup. Haven't even tried indexing of src ...

Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54316 is a reply to message #54313] Mon, 22 June 2020 22:44 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
This is interesting (after full rebuild):
:~/dvlp/cpp/code/upp/out/uppsrc/CLANGcpp17.Debug.Debug_Full.Gui.Shared$ ./ide 
Heap is corrupted --memory-breakpoint__ 9209


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54323 is a reply to message #54316] Tue, 23 June 2020 10:01 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Mon, 22 June 2020 22:44
This is interesting (after full rebuild):
:~/dvlp/cpp/code/upp/out/uppsrc/CLANGcpp17.Debug.Debug_Full.Gui.Shared$ ./ide 
Heap is corrupted --memory-breakpoint__ 9209


Unrelated, but should be now fixed.
Re: ide: Assist parsing now parallel and some of it background [message #54325 is a reply to message #54313] Tue, 23 June 2020 10:54 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Mon, 22 June 2020 19:34
I checked TheIDE with ThreadSanitizer and got a lot of data race warnings right on startup. Haven't even tried indexing of src ...


I am trying to decipher that, but so far it _looks_ like races in GTK. Or maybe false reports of races in GTK...
Re: ide: Assist parsing now parallel and some of it background [message #54327 is a reply to message #54323] Tue, 23 June 2020 14:29 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
mirek wrote on Tue, 23 June 2020 04:01
Novo wrote on Mon, 22 June 2020 22:44
This is interesting (after full rebuild):
:~/dvlp/cpp/code/upp/out/uppsrc/CLANGcpp17.Debug.Debug_Full.Gui.Shared$ ./ide 
Heap is corrupted --memory-breakpoint__ 9209


Unrelated, but should be now fixed.

Thanks.
It prevented tests from running.
Ide on exit:
==1001757== Conditional jump or move depends on uninitialised value(s)
==1001757==    at 0x5C9904: Upp::String0::IsEqual(Upp::String0 const&) const (Core/String.h:283)
==1001757==    by 0x53D0F2: Upp::AString<Upp::String0>::IsEqual(Upp::String const&) const (Core/String.h:78)
==1001757==    by 0x5143BF: Upp::operator==(Upp::String const&, Upp::String const&) (Core/String.h:151)
==1001757==    by 0x5E5BD9: SaveChangedFile(char const*, Upp::String, bool) (Core.cpp:328)
==1001757==    by 0x453D6B: Ide::SaveConfig() (Config.cpp:331)
==1001757==    by 0x4541C1: Ide::SaveConfigOnTime() (Config.cpp:344)
==1001757==    by 0x4D5694: GuiMainFn_() (main.cpp:317)
==1001757==    by 0x8F5341: Upp::AppExecute__(void (*)()) (App.cpp:442)
==1001757==    by 0x4D41FA: main (main.cpp:120)


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54328 is a reply to message #54327] Tue, 23 June 2020 15:17 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Tue, 23 June 2020 14:29
mirek wrote on Tue, 23 June 2020 04:01
Novo wrote on Mon, 22 June 2020 22:44
This is interesting (after full rebuild):
:~/dvlp/cpp/code/upp/out/uppsrc/CLANGcpp17.Debug.Debug_Full.Gui.Shared$ ./ide 
Heap is corrupted --memory-breakpoint__ 9209


Unrelated, but should be now fixed.

Thanks.
It prevented tests from running.
Ide on exit:
==1001757== Conditional jump or move depends on uninitialised value(s)
==1001757==    at 0x5C9904: Upp::String0::IsEqual(Upp::String0 const&) const (Core/String.h:283)
==1001757==    by 0x53D0F2: Upp::AString<Upp::String0>::IsEqual(Upp::String const&) const (Core/String.h:78)
==1001757==    by 0x5143BF: Upp::operator==(Upp::String const&, Upp::String const&) (Core/String.h:151)
==1001757==    by 0x5E5BD9: SaveChangedFile(char const*, Upp::String, bool) (Core.cpp:328)
==1001757==    by 0x453D6B: Ide::SaveConfig() (Config.cpp:331)
==1001757==    by 0x4541C1: Ide::SaveConfigOnTime() (Config.cpp:344)
==1001757==    by 0x4D5694: GuiMainFn_() (main.cpp:317)
==1001757==    by 0x8F5341: Upp::AppExecute__(void (*)()) (App.cpp:442)
==1001757==    by 0x4D41FA: main (main.cpp:120)


How about now?
Re: ide: Assist parsing now parallel and some of it background [message #54329 is a reply to message #54325] Tue, 23 June 2020 15:24 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
mirek wrote on Tue, 23 June 2020 04:54

I am trying to decipher that, but so far it _looks_ like races in GTK. Or maybe false reports of races in GTK...

IMHO, it is very unlikely that GTK has races. Maybe, it just requires extra-synchronization ...
ThreadSanitizer can check only code, compiled with ThreadSanitizer. That means it cannot see any problems with GTK ...
Valgrind-based tools can. Helgrind, for example, reports tons of this:
==1004525== Possible data race during read of size 4 at 0x6C47A60 by thread #4
==1004525== Locks held: none
==1004525==    at 0x5BD9D45: g_private_get (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B895CF: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B8C17C: g_main_current_source (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x59AF34E: g_task_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A18C71: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A18DAF: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A18E61: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5B8CE8D: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B8D23F: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B8D532: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5A18E99: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5BB6930: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==  Address 0x6c47a60 is 0 bytes inside a block of size 4 alloc'd
==1004525==    at 0x483C893: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_helgrind-amd64-linux.so)
==1004525==    by 0x5BD9743: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5BD9D63: g_private_get (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B895CF: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5B8C17C: g_main_current_source (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x59AF34E: g_task_new (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A05E7A: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A09BEC: g_dbus_connection_send_message_with_reply (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A0A4DA: g_dbus_connection_send_message_with_reply_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A0A8DE: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A0C8C6: g_dbus_connection_call_sync (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5A0CB65: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==  Block was alloc'd by thread #1
==1004525== 
==1004525== ----------------------------------------------------------------
==1004525== 
==1004525==  Lock at 0x14AD088 was first observed
==1004525==    at 0x4843D9D: pthread_mutex_init (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_helgrind-amd64-linux.so)
==1004525==    by 0x8DFF18: Upp::Mutex::Mutex() (Mt.cpp:601)
==1004525==    by 0x6AB669: Upp::StaticPrimitive_<Upp::Mutex>::Initialize() (Mt.h:313)
==1004525==    by 0x6AB5E4: Upp::StaticPrimitive_<Upp::Mutex>::Get() (Mt.h:316)
==1004525==    by 0x6A7A67: Upp::StaticMutex::Enter() (Core/Mt.h:323)
==1004525==    by 0xCBC9A0: Upp::EnterGuiMutex() (CtrlMt.cpp:15)
==1004525==    by 0x678070: Upp::GuiLock::GuiLock() (CtrlCore/CtrlCore.h:66)
==1004525==    by 0xCC4274: Upp::Ctrl::InstallKeyHook(bool (*)(Upp::Ctrl*, unsigned int, int)) (Ctrl.cpp:712)
==1004525==    by 0x7807B2: Upp::s__sF29_328_fn() (MenuBar.cpp:330)
==1004525==    by 0x518D75: Upp::Callinit::Callinit(void (*)(), char const*, int) (Core/Defs.h:86)
==1004525==    by 0x410D2B: __cxx_global_var_init.120 (MenuBar.cpp:328)
==1004525==    by 0x411700: _GLOBAL__sub_I_CtrlLib_blitz.cpp (CtrlLib$blitz.cpp:0)
==1004525==  Address 0x14ad088 is 8 bytes inside data symbol "_ZN3UppL6sGLockE"
==1004525== 
==1004525==  Lock at 0x6C1AC70 was first observed
==1004525==    at 0x4843D9D: pthread_mutex_init (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_helgrind-amd64-linux.so)
==1004525==    by 0x5BD993D: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5BD9A17: g_rec_mutex_lock (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x597BAC6: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5965681: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x4EF9BCB: gtk_css_provider_load_from_path (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x4EF9F07: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x503A30A: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x503D944: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x7D5D80: Upp::GtkSettingsString(char const*) (ChGtk3.cpp:24)
==1004525==    by 0x7D5E6E: Upp::SetupFont() (ChGtk3.cpp:35)
==1004525==    by 0x7D283F: Upp::ChHostSkin() (ChGtk3.cpp:285)
==1004525==  Address 0x6c1ac70 is 0 bytes inside a block of size 40 alloc'd
==1004525==    at 0x483C893: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_helgrind-amd64-linux.so)
==1004525==    by 0x5BD9910: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x5BD9A17: g_rec_mutex_lock (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.2)
==1004525==    by 0x597BAC6: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x5965681: g_file_new_for_path (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.2)
==1004525==    by 0x4EF9BCB: gtk_css_provider_load_from_path (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x4EF9F07: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x503A30A: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x503D944: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.14)
==1004525==    by 0x7D5D80: Upp::GtkSettingsString(char const*) (ChGtk3.cpp:24)
==1004525==    by 0x7D5E6E: Upp::SetupFont() (ChGtk3.cpp:35)
==1004525==    by 0x7D283F: Upp::ChHostSkin() (ChGtk3.cpp:285)
==1004525==  Block was alloc'd by thread #1

DRD, on other side, reports a lot of problems with GTK itself, but Upp (on startup).
The only Upp-related error I saw so far is this:
==1005305== Probably a race condition: condition variable 0x1484d88 has been signaled but the associated mutex 0x1484d60 is not locked by the signalling thread.
==1005305==    at 0x48487EB: pthread_cond_broadcast@* (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_drd-amd64-linux.so)
==1005305==    by 0x97DEF4: Upp::ConditionVariable::Broadcast() (Mt.h:265)
==1005305==    by 0x94AD20: Upp::CoWork::Pool::ExitThreads() (CoWork.cpp:39)
==1005305==    by 0x94B0FC: Upp::CoWork::Pool::~Pool() (CoWork.cpp:71)
==1005305==    by 0x60AEA26: __run_exit_handlers (exit.c:108)
==1005305==    by 0x60AEBDF: exit (exit.c:139)
==1005305==    by 0x608C0B9: (below main) (libc-start.c:342)
==1005305== cond 0x1484d88 was first observed at:
==1005305==    at 0x4846F6B: pthread_cond_init@* (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_drd-amd64-linux.so)
==1005305==    by 0x97E0B8: Upp::ConditionVariable::ConditionVariable() (Mt.h:267)
==1005305==    by 0x94AEDB: Upp::CoWork::Pool::Pool() (CoWork.cpp:54)
==1005305==    by 0x94AAA7: Upp::CoWork::GetPool() (CoWork.cpp:17)
==1005305==    by 0x94BBE8: Upp::CoWork::Finish() (CoWork.cpp:287)
==1005305==    by 0xC2F2AD: Upp::BufferPainter::FinishFillJob() (BufferPainter.h:296)
==1005305==    by 0xC109C4: Upp::BufferPainter::Finish() (Render.cpp:450)
==1005305==    by 0x7FFD80: Upp::ImagePainter::GetResult() (Painter/Painter.h:376)
==1005305==    by 0x7F2012: Upp::ImagePainter::operator Upp::Image() (Painter/Painter.h:377)
==1005305==    by 0x7CBD0D: Upp::MakeElement(Upp::Size_<int>, double, Upp::Image const&, double, Upp::Color, Upp::Function<void (Upp::Painter&, Upp::Rect_<double> const&)>) (Ch.cpp:281)
==1005305==    by 0x7CBFB7: Upp::MakeButton(int, Upp::Image const&, double, Upp::Color, unsigned int) (Ch.cpp:290)
==1005305==    by 0x7C8391: Upp::MakeButton(int, Upp::Color, double, Upp::Color, unsigned int) (Ch.cpp:297)
==1005305== mutex 0x1484d60 was first observed at:
==1005305==    at 0x4844C36: pthread_mutex_init (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_drd-amd64-linux.so)
==1005305==    by 0x8DFF18: Upp::Mutex::Mutex() (Mt.cpp:601)
==1005305==    by 0x94AEC0: Upp::CoWork::Pool::Pool() (CoWork.cpp:54)
==1005305==    by 0x94AAA7: Upp::CoWork::GetPool() (CoWork.cpp:17)
==1005305==    by 0x94BBE8: Upp::CoWork::Finish() (CoWork.cpp:287)
==1005305==    by 0xC2F2AD: Upp::BufferPainter::FinishFillJob() (BufferPainter.h:296)
==1005305==    by 0xC109C4: Upp::BufferPainter::Finish() (Render.cpp:450)
==1005305==    by 0x7FFD80: Upp::ImagePainter::GetResult() (Painter/Painter.h:376)
==1005305==    by 0x7F2012: Upp::ImagePainter::operator Upp::Image() (Painter/Painter.h:377)
==1005305==    by 0x7CBD0D: Upp::MakeElement(Upp::Size_<int>, double, Upp::Image const&, double, Upp::Color, Upp::Function<void (Upp::Painter&, Upp::Rect_<double> const&)>) (Ch.cpp:281)
==1005305==    by 0x7CBFB7: Upp::MakeButton(int, Upp::Image const&, double, Upp::Color, unsigned int) (Ch.cpp:290)
==1005305==    by 0x7C8391: Upp::MakeButton(int, Upp::Color, double, Upp::Color, unsigned int) (Ch.cpp:297)


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54330 is a reply to message #54329] Tue, 23 June 2020 17:02 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Tue, 23 June 2020 15:24
mirek wrote on Tue, 23 June 2020 04:54

I am trying to decipher that, but so far it _looks_ like races in GTK. Or maybe false reports of races in GTK...

IMHO, it is very unlikely that GTK has races. Maybe, it just requires extra-synchronization ...


Well, the first error reported by sanitizer

==================
WARNING: ThreadSanitizer: data race (pid=27062)
  Read of size 8 at 0x7b04000096a0 by thread T1:
    #0 strlen <null> (libtsan.so.0+0x31275)
    #1 pthread_setname_np ../sysdeps/unix/sysv/linux/pthread_setname.c:38 (libpthread.so.0+0x1391c)
    #2 <null> <null> (libglib-2.0.so.0+0x7415d)

  Previous write of size 8 at 0x7b04000096a0 by main thread (mutexes: write M505):
    #0 malloc <null> (libtsan.so.0+0x2ae03)
    #1 g_malloc <null> (libglib-2.0.so.0+0x51ab8)
    #2 main /home/cxl/upp.src/uppsrc/ide/main.cpp:120 (debugide+0x51ee31)

  Location is heap block of size 13 at 0x7b04000096a0 allocated by main thread:
    #0 malloc <null> (libtsan.so.0+0x2ae03)
    #1 g_malloc <null> (libglib-2.0.so.0+0x51ab8)
    #2 main /home/cxl/upp.src/uppsrc/ide/main.cpp:120 (debugide+0x51ee31)

  Mutex M505 (0x000001f35198) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x2c5ad)
    #1 Mutex /home/cxl/upp.src/uppsrc/Core/Mt.cpp:601 (debugide+0xbc27ac)
    #2 Upp::StaticPrimitive_<Upp::Mutex>::Initialize() /home/cxl/upp.src/uppsrc/Core/Mt.h:313 (debugide+0x81c9ca)
    #3 Upp::StaticPrimitive_<Upp::Mutex>::Get() /home/cxl/upp.src/uppsrc/Core/Mt.h:316 (debugide+0x81c901)
    #4 Upp::StaticMutex::Enter() /home/cxl/upp.src/uppsrc/Core/Mt.h:323 (debugide+0x816818)
    #5 Upp::EnterGuiMutex() /home/cxl/upp.src/uppsrc/CtrlCore/CtrlMt.cpp:15 (debugide+0x12d2658)
    #6 GuiLock /home/cxl/upp.src/uppsrc/CtrlCore/CtrlCore.h:66 (debugide+0x7d5614)
    #7 Upp::Ctrl::InstallKeyHook(bool (*)(Upp::Ctrl*, unsigned int, int)) /home/cxl/upp.src/uppsrc/CtrlCore/Ctrl.cpp:712 (debugide+0x12de181)
    #8 Upp::s__sF29_328_fn() /home/cxl/upp.src/uppsrc/CtrlLib/MenuBar.cpp:330 (debugide+0x97a71c)
    #9 Callinit /home/cxl/upp.src/uppsrc/Core/Defs.h:86 (debugide+0x583742)
    #10 __cxx_global_var_init.120 /home/cxl/upp.src/uppsrc/CtrlLib/MenuBar.cpp:328 (debugide+0x41311f)
    #11 _GLOBAL__sub_I_CtrlLib_blitz.cpp /home/cxl/.cache/upp.out/uppsrc/CtrlLib/CLANG_TS.Debug.Debug_Full.Gui.Shared/CtrlLib$blitz.cpp (debugide+0x413fc5)
    #12 __libc_csu_init <null> (debugide+0x154e76c)

  Thread T1 'dconf worker' (tid=27064, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x2bcee)
    #1 <null> <null> (libglib-2.0.so.0+0x9240f)
    #2 main /home/cxl/upp.src/uppsrc/ide/main.cpp:120 (debugide+0x51ee31)

SUMMARY: ThreadSanitizer: data race (/usr/lib/x86_64-linux-gnu/libtsan.so.0+0x31275) in __interceptor_strlen


This looks like "dconf worker", which I think is DBus related, is trying to set the name of thread to a value set by main gtk thread and passed by the heap. The only U++ code referenced is our locked mutex, which is really only listed because it is being locked at the same time...

Mirek
Re: ide: Assist parsing now parallel and some of it background [message #54331 is a reply to message #54328] Tue, 23 June 2020 19:43 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
mirek wrote on Tue, 23 June 2020 09:17

How about now?

uninitialised value is gone.
I do not see Upp::ConditionVariable::Broadcast() problem anymore.

Almost all complains of DRD are related to Upp::Ctrl::Create(Upp::Ctrl*, bool) --> g_task_run_in_thread() now.
I guess this issue can be ignored.

Thanks.


Regards,
Novo
Re: ide: Assist parsing now parallel and some of it background [message #54332 is a reply to message #54331] Tue, 23 June 2020 19:56 Go to previous message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
Novo wrote on Tue, 23 June 2020 13:43
mirek wrote on Tue, 23 June 2020 09:17

How about now?

uninitialised value is gone.
I do not see Upp::ConditionVariable::Broadcast() problem anymore.

Almost all complains of DRD are related to Upp::Ctrl::Create(Upp::Ctrl*, bool) --> g_task_run_in_thread() now.
I guess this issue can be ignored.

Thanks.

Actually, these messages look similar to what ThreadSanitizer is reporting:
WARNING: ThreadSanitizer: data race (pid=1166000)
  Write of size 8 at 0x7b1800026040 by main thread (mutexes: write M538):
    #0 free <null> (ide+0x442cc8)
    #1 <null> <null> (libglib-2.0.so.0+0x4e991)
    #2 Upp::Ctrl::Create(Upp::Ctrl*, bool) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/GtkCreate.cpp:74:2 (ide+0x139755a)
    #3 Upp::TopWindow::Open(Upp::Ctrl*) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/GtkTop.cpp:129:2 (ide+0x139d035)
    #4 Upp::TopWindow::Open() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/GtkTop.cpp:149:2 (ide+0x1387182)
    #5 SelectPackageDlg::Load(Upp::String const&) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/SelectPkg.cpp:681:4 (ide+0x4dbe7d)
    #6 SelectPackageDlg::OnBase() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/SelectPkg.cpp:360:3 (ide+0x4dfbdd)
    #7 Upp::CallbackN<> Upp::callback<SelectPackageDlg, SelectPackageDlg>(SelectPackageDlg*, void (SelectPackageDlg::*)())::'lambda'()::operator()() const /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/CallbackNP.i:38:36 (ide+0x6d2b40)
    #8 Upp::Function<void ()>::Wrapper<Upp::CallbackN<> Upp::callback<SelectPackageDlg, SelectPackageDlg>(SelectPackageDlg*, void (SelectPackageDlg::*)())::'lambda'()>::Execute() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Function.h:17:50 (ide+0x6d29af)
    #9 Upp::Function<void ()>::operator()() const /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Function.h:76:65 (ide+0x635e5b)
    #10 Upp::ArrayCtrl::SetCursor0(int, bool) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlLib/ArrayCtrl.cpp:1429:3 (ide+0x993bca)
    #11 Upp::ArrayCtrl::SetCursor(int) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlLib/ArrayCtrl.cpp:1449:9 (ide+0x98e059)
    #12 Upp::ArrayCtrl::FindSetCursor(Upp::Value const&, int, int) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlLib/ArrayCtrl.cpp:2410:6 (ide+0x9a80f1)
    #13 SelectPackageDlg::SyncBase(Upp::String) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/SelectPkg.cpp:699:11 (ide+0x4e1fd1)
    #14 SelectPackageDlg::Run(Upp::String) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/SelectPkg.cpp:311:3 (ide+0x4e18d2)
    #15 SelectPackage(char const*, char const*, bool, bool) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/SelectPkg.cpp:724:17 (ide+0x4e63b5)
    #16 Ide::OpenMainPackage() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/ide.cpp:157:13 (ide+0x520147)
    #17 GuiMainFn_() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/main.cpp:306:20 (ide+0x5c7190)
    #18 Upp::AppExecute__(void (*)()) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/App.cpp:442:3 (ide+0xc71a85)
    #19 main /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/main.cpp:120:1 (ide+0x5c57dc)

  Previous write of size 8 at 0x7b1800026040 by thread T21:
    #0 calloc <null> (ide+0x4428f0)
    #1 g_malloc0 <null> (libglib-2.0.so.0+0x57d30)

  Mutex M538 (0x0000027ca0c8) created at:
    #0 pthread_mutex_init <null> (ide+0x4454bd)
    #1 Upp::Mutex::Mutex() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Mt.cpp:601:2 (ide+0xc506ac)
    #2 Upp::StaticPrimitive_<Upp::Mutex>::Initialize() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Mt.h:313:46 (ide+0x8b63da)
    #3 Upp::StaticPrimitive_<Upp::Mutex>::Get() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Mt.h:316:38 (ide+0x8b6317)
    #4 Upp::StaticMutex::Enter() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Mt.h:323:31 (ide+0x8b02c8)
    #5 Upp::EnterGuiMutex() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/CtrlMt.cpp:15:10 (ide+0x1350079)
    #6 Upp::GuiLock::GuiLock() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/CtrlCore.h:66:15 (ide+0x8709c4)
    #7 Upp::Ctrl::InstallKeyHook(bool (*)(Upp::Ctrl*, unsigned int, int)) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/Ctrl.cpp:712:10 (ide+0x135b6a1)
    #8 Upp::s__sF29_328_fn() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlLib/MenuBar.cpp:330:2 (ide+0xa0ffca)
    #9 Upp::Callinit::Callinit(void (*)(), char const*, int) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/Defs.h:86:83 (ide+0x627646)
    #10 __cxx_global_var_init.119 /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlLib/MenuBar.cpp:328:1 (ide+0x42d0f9)
    #11 _GLOBAL__sub_I_CtrlLib_blitz.cpp /home/ssg/dvlp/cpp/code/upp/out/uppsrc/CtrlLib/CLANGcpp17tsan.Debug.Debug_Full.Gui.Shared.Usemalloc/CtrlLib$blitz.cpp (ide+0x42de3b)
    #12 __libc_csu_init <null> (ide+0x15cbddc)

  Thread T21 'pool-ide' (tid=1166023, running) created by main thread at:
    #0 pthread_create <null> (ide+0x443f3b)
    #1 <null> <null> (libglib-2.0.so.0+0x9f11a)
    #2 Upp::Ctrl::PopUp(Upp::Ctrl*, bool, bool, bool, bool) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/CtrlCore/GtkCreate.cpp:153:2 (ide+0x1398e23)
    #3 ShowSplash() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/About.cpp:109:23 (ide+0x5936c5)
    #4 GuiMainFn_() /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/main.cpp:282:4 (ide+0x5c6f7d)
    #5 Upp::AppExecute__(void (*)()) /home/ssg/dvlp/cpp/code/upp/git/uppsrc/Core/App.cpp:442:3 (ide+0xc71a85)
    #6 main /home/ssg/dvlp/cpp/code/upp/git/uppsrc/ide/main.cpp:120:1 (ide+0x5c57dc)

In this case it is Thread T21 'pool-ide' and Upp::Ctrl::Create(Upp::Ctrl*, bool) again ...


Regards,
Novo
Previous Topic: Variadic templates helper functions
Next Topic: get_i
Goto Forum:
  


Current Time: Fri Mar 29 16:41:11 CET 2024

Total time taken to generate the page: 0.01968 seconds