On Sunday 14 February 2016 21:57:33 Yves Guillemot wrote:
> The bug should be fixed in rev. 14518. (At least it's fixed on my system).
> 
> Some objects related to audio files read and write are now explicitely in 
> main.
> 
> Previously they was defined as static and no more initialized when their code 
> was included in a static library. 
> This is why the bug was not visible in debug mode which doesn't use a static 
> library.
> 
> If other static objects exist they should cause other bugs which are only 
> visible in release build.
> Currently I only found the four of them involved in #1503 and I presume such 
> static (or global) objects are scarce in RG code.
> Nevertheless there is more than 600 .cpp files in RG code.
> 
> Does anybody know some tool we can use to find such static/global objects in 
> RG 
> code ?

In theory,
nm --demangle librosegardenprivate.so | grep GLOBAL
is the answer. It shows all the files with a global object. However there's
a complication: the <iostream> header defines a global object
  static ios_base::Init __ioinit;
which means any cpp file that includes <iostream> has at least one global 
object,
so the result from the above grep is a very long list.

The only way I know to find out more is to run elf-dissector, written by my 
colleague Volker
(git clone git://anongit.kde.org/elf-dissector). It shows the same list as 
above when
clicking on the .init_array entry, but instead you can go to
_Z41__static_initialization_and_destruction_0ii
which shows the code of the global initialization function.
Copy/pasting that and grepping for Source gives the following result:

Source: 
/s/kde/src/4/rosegarden-git/src/document/io/MusicXmlExportHelper.cpp:1561
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:39
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:39
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:40
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:41
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:43
Source: /s/kde/src/4/rosegarden-git/src/sound/SoundFile.h:44
Source: /s/kde/src/4/rosegarden-git/src/sound/Midi.h:35
Source: /s/kde/src/4/rosegarden-git/src/sound/Midi.h:36

Indeed I found this:
 src/document/io/LilyPondExporter.h:const std::string headerDedication = 
"dedication"; 
 src/sound/Midi.h:const std::string MIDI_TRACK_HEADER             = "MTrk";

These should be a const char[] and it should be in a .cpp file.

src/base/MidiDevice.cpp:    static std::string controls[][9] = {
src/base/SoftSynthDevice.cpp:    static std::string controls[][9] = {
src/sound/MidiFile.cpp:static const std::string defaultTrackName = "Imported 
MIDI";

All these should be char[] instead of std::string.

I wonder why the one in LilypondExporter.h didn't show up, I found it with more 
clicking.
Needs further investigation, after the above is fixed.

-- 
David Faure, fa...@kde.org, http://www.davidfaure.fr
Working on KDE Frameworks 5


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Rosegarden-devel mailing list
Rosegarden-devel@lists.sourceforge.net - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel

Reply via email to