HISE Logo Forum
    • Categories
    • Register
    • Login

    Crash on MacOS in compiled plugin when working with HardcodedEnvelopeModulator

    Scheduled Pinned Locked Moved Solved Bug Reports
    28 Posts 3 Posters 398 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • OrvillainO
      Orvillain
      last edited by Orvillain

      @Christoph-Hart

      I turned on all symbol support and recompiled with LTO set to 'Monolithic' and this is the crash I get:

      Thread 0 Crashed:: MainThread Dispatch queue: com.apple.main-thread
      0   blankplugin                   	       0x17d35567c hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680
      1   blankplugin                   	       0x17d35d4fc hise::HardcodedSwappableEffect::restoreHardcodedData(juce::ValueTree const&) + 308
      2   blankplugin                   	       0x17d13ae60 hise::Processor::restoreFromValueTree(juce::ValueTree const&) + 3376
      3   blankplugin                   	       0x17d14679c hise::EnvelopeModulator::restoreFromValueTree(juce::ValueTree const&) + 40
      4   blankplugin                   	       0x17d13ae60 hise::Processor::restoreFromValueTree(juce::ValueTree const&) + 3376
      5   blankplugin                   	       0x17d17702c hise::ModulatorSynth::restoreFromValueTree(juce::ValueTree const&) + 1496
      6   blankplugin                   	       0x17d368ce0 non-virtual thunk to hise::GlobalModulatorContainer::restoreFromValueTree(juce::ValueTree const&) + 40
      7   blankplugin                   	       0x17d13ae60 hise::Processor::restoreFromValueTree(juce::ValueTree const&) + 3376
      8   blankplugin                   	       0x17d17702c hise::ModulatorSynth::restoreFromValueTree(juce::ValueTree const&) + 1496
      9   blankplugin                   	       0x17d1ad784 hise::ModulatorSynthChain::restoreFromValueTree(juce::ValueTree const&) + 336
      10  blankplugin                   	       0x17d40d3f0 hise::FrontendProcessor::createPreset(juce::ValueTree const&) + 152
      11  blankplugin                   	       0x17d40bd84 hise::FrontendProcessor::FrontendProcessor(juce::ValueTree&, juce::AudioDeviceManager*, juce::AudioProcessorPlayer*, juce::MemoryInputStream*, juce::MemoryInputStream*, juce::MemoryInputStream*, juce::MemoryInputStream*, juce::ValueTree*, juce::ValueTree*) + 10924
      12  blankplugin                   	       0x17d062294 juce::JuceVST3Component::JuceVST3Component(Steinberg::Vst::IHostApplication*) + 4404
      13  blankplugin                   	       0x17d059fa0 juce::createComponentInstance(Steinberg::Vst::IHostApplication*) + 36
      14  blankplugin                   	       0x17d06de18 juce::JucePluginFactory::createInstance(char const*, char const*, void**) + 216
      15  Live                          	       0x106e308c4 0x104860000 + 39651524
      16  Live                          	       0x106c5261c 0x104860000 + 37692956
      17  Live                          	       0x106c52008 0x104860000 + 37691400
      18  Live                          	       0x106c51824 0x104860000 + 37689380
      19  Live                          	       0x105c147e4 0x104860000 + 20662244
      20  Live                          	       0x105c144ac 0x104860000 + 20661420
      21  Live                          	       0x105c233d8 0x104860000 + 20722648
      22  Live                          	       0x105bf8cf4 0x104860000 + 20548852
      23  Live                          	       0x106e38890 0x104860000 + 39684240
      24  Live                          	       0x106db8758 0x104860000 + 39159640
      25  Live                          	       0x106d50b38 0x104860000 + 38734648
      26  Live                          	       0x1062bb118 0x104860000 + 27635992
      27  Live                          	       0x1062e3de0 0x104860000 + 27803104
      28  Live                          	       0x106280154 0x104860000 + 27394388
      29  Live                          	       0x1062e1084 0x104860000 + 27791492
      30  Live                          	       0x1062e0d08 0x104860000 + 27790600
      31  Live                          	       0x1062e0ec0 0x104860000 + 27791040
      32  Live                          	       0x1070c5b7c 0x104860000 + 42359676
      33  Live                          	       0x1076ca798 0x104860000 + 48670616
      34  Live                          	       0x1076ca408 0x104860000 + 48669704
      35  Live                          	       0x1059e44ec 0x104860000 + 18367724
      36  Live                          	       0x10572f654 0x104860000 + 15529556
      37  Live                          	       0x10572f1c4 0x104860000 + 15528388
      38  Live                          	       0x10593dc9c 0x104860000 + 17685660
      39  Foundation                    	       0x1949d0fcc __NSFireTimer + 104
      40  CoreFoundation                	       0x1933e2e14 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 32
      41  CoreFoundation                	       0x1933e2ad4 __CFRunLoopDoTimer + 980
      42  CoreFoundation                	       0x1933e2610 __CFRunLoopDoTimers + 332
      43  CoreFoundation                	       0x1933c8a18 __CFRunLoopRun + 1848
      44  CoreFoundation                	       0x1933c7c58 CFRunLoopRunSpecific + 572
      45  HIToolbox                     	       0x19ee5c27c RunCurrentEventLoopInMode + 324
      46  HIToolbox                     	       0x19ee5f4e8 ReceiveNextEventCommon + 676
      47  HIToolbox                     	       0x19efea484 _BlockUntilNextEventMatchingListInModeWithFilter + 76
      48  AppKit                        	       0x1972efab4 _DPSNextEvent + 684
      49  AppKit                        	       0x197c8e5b0 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
      50  AppKit                        	       0x1972e2c64 -[NSApplication run] + 480
      51  Live                          	       0x10593d068 0x104860000 + 17682536
      52  dyld                          	       0x192f3eb98 start + 6076
      
      

      Looks to be related to restoring a JUCE value tree??

      This does not happen when LTO is set to 'No' - I'm going to try 'Incremental' as well - I'm changing the VST3 and the SharedCode targets.

      BTW - this crash happens with or without calling .setEffect() in my Interface script. IE: Even if I comment this out:

      const var HardcodedEnvelopeModulator1 = Synth.getSlotFX("HardcodedEnvelopeModulator1");
      HardcodedEnvelopeModulator1.setEffect("ScriptEnvNetwork");
      

      I still get the crash.

      Musician - Instrument Designer - Sonic Architect - Creative Product Owner
      Crafting sound at every level. From strings to signal paths, samples to systems.

      1 Reply Last reply Reply Quote 0
      • OrvillainO
        Orvillain
        last edited by

        ScriptEnvNetwork.xml

        This is my network file.

        Musician - Instrument Designer - Sonic Architect - Creative Product Owner
        Crafting sound at every level. From strings to signal paths, samples to systems.

        1 Reply Last reply Reply Quote 0
        • OrvillainO
          Orvillain
          last edited by Orvillain

          Attaching xcode as a debugger - which to do I had to use this script:https://gist.github.com/talaviram/1f21e141a137744c89e81b58f73e23c3

          So yes, it is definitely crashing in setEffect. It looks like
          d7dfbd52-902c-4b04-a5c3-3b45a3558751-image.png

          ->  0x3419347c4 <+2820>: ldar   w8, [x0]
          MainThread (1): EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff0)
          

          So I would suggest that link-time optimization is corrupting a pointer, and garbage is being fed into setEffect() but I am honestly reaching the limits of my debugging skills here now.

          Closest I can get to is:
          HISE/hi_core/hi_modules/hardcoded/HardcodedModuleBase.cpp

          Line 427:
          bool HardcodedSwappableEffect::setEffect(const String& factoryId, bool /unused/)

          The crash happens somewhere in this function.

          @Christoph-Hart Is any of this useful??

          Musician - Instrument Designer - Sonic Architect - Creative Product Owner
          Crafting sound at every level. From strings to signal paths, samples to systems.

          1 Reply Last reply Reply Quote 0
          • OrvillainO
            Orvillain
            last edited by

            I believe it is this part blowing up:

            HISE/hi_core/hi_modules/hardcoded/HardcodedModuleBase.cpp:506
            → asProcessor().parameterNames.removeRange(getParameterOffset(), INT_MAX);
            

            This is what I got when I did a trace using a release build with symbols, with xcode attached to Ableton Live.

            (lldb) image lookup --address $pc
                  Address: blankplugin[0x000000000030167c] (blankplugin.__TEXT.__text + 3146236)
                  Summary: blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] int std::__1::__cxx_atomic_load[abi:ne190102]<int>(std::__1::__cxx_atomic_base_impl<int> const*, std::__1::memory_order) at cxx_atomic_impl.h:317:10
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] std::__1::__atomic_base<int, false>::load[abi:ne190102](std::__1::memory_order) const at atomic_base.h:59:12
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] juce::Atomic<int>::get() const at juce_Atomic.h:64:60
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] juce::StringHolder::isEmptyString(juce::StringHolder*) at juce_String.cpp:219:33
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] juce::StringHolder::release(juce::StringHolder*) at juce_String.cpp:162:15
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2680 [inlined] juce::StringHolder::release(juce::CharPointer_UTF8) + 4 at juce_String.cpp:169:9
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2676 [inlined] juce::String::~String() + 4 at juce_String.cpp:247:5
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2672 [inlined] juce::String::~String() at juce_String.cpp:246:1
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2672 [inlined] juce::Identifier::~Identifier() at juce_Identifier.cpp:27:37
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2672 [inlined] juce::Identifier::~Identifier() at juce_Identifier.cpp:27:36
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2672 [inlined] std::__1::enable_if<!IsTriviallyCopyable<juce::Identifier>::value, void>::type juce::ArrayBase<juce::Identifier, juce::DummyCriticalSection>::removeElementsInternal<juce::Identifier>(int, int) + 60 at juce_ArrayBase.h:508:31
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2612 [inlined] juce::ArrayBase<juce::Identifier, juce::DummyCriticalSection>::removeElements(int, int) at juce_ArrayBase.h:363:13
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2612 [inlined] juce::Array<juce::Identifier, juce::DummyCriticalSection, 0>::removeRange(int, int) at juce_Array.h:926:20
                           blankplugin`hise::HardcodedSwappableEffect::setEffect(juce::String const&, bool) + 2612 at HardcodedModuleBase.cpp:506:33
            
            (lldb) frame select 13
            expr -- (int)getParameterOffset()
            expr -- (int)asProcessor().parameterNames.size()
            frame #13: 0x000000017d679638 blankplugin`hise::HardcodedSwappableEffect::setEffect(this=0x000000011dcb8000, factoryId=<unavailable>, (null)=<unavailable>) at HardcodedModuleBase.cpp:506:33 [opt]
               503 			}
               504 			else
               505 			{
            -> 506 				asProcessor().parameterNames.removeRange(getParameterOffset(), INT_MAX);
                				                             ^
               507 			}
               508 	
               509 			auto illegalIds = getIllegalParameterIds();
            (int) $4 = 2
            error: Couldn't look up symbols:
              __ZN4hise24HardcodedSwappableEffect11asProcessorEv
            Hint: The expression tried to call a function that is not present in the target, perhaps because it was optimized out by the compiler.
            

            Is any of this useful?

            Musician - Instrument Designer - Sonic Architect - Creative Product Owner
            Crafting sound at every level. From strings to signal paths, samples to systems.

            1 Reply Last reply Reply Quote 0
            • OrvillainO
              Orvillain
              last edited by

              Just to be super sure, I scrapped all my custom HISE changes - increasing script node parameter limit to 64 and setting the channel count in the macros file to 128 - and I still get the same crash.

              Musician - Instrument Designer - Sonic Architect - Creative Product Owner
              Crafting sound at every level. From strings to signal paths, samples to systems.

              1 Reply Last reply Reply Quote 0
              • OrvillainO
                Orvillain
                last edited by Orvillain

                I completely wiped HISE off my system, and re-cloned the latest develop.

                I started a completely new project. All it has is a global modulation container, with a hardcoded envelope modulator in it. The modulator is an oscillator going into a sig2mod.

                I tried it with zero parameters, and then I tried it with 1 parameter, and then I tried it with 2 parameters, and then I tried it with 3 parameters. I even also did 10 parameters, 7 of which were connected to the various available parameters, and 3 not connected.

                In all cases, I get the crash. I didn't bother messing with dsym symbols for this one. It's the same crash. Blatantly. Here is the project:
                https://www.dropbox.com/scl/fi/steiw1ydyaq48runfv2i5/anewblankproject.zip?rlkey=or36uwjbj42f0e5tqqrto4dsp&st=rkg2otg6&dl=0

                And here's the previous one:
                https://www.dropbox.com/scl/fi/g5235ul4gkviziv0j6n8r/blankplugin.zip?rlkey=tdxaelcnteyrjy9i8de1bhkqu&dl=0

                Conclusion: There seems to be an issue with link-time optimization, optimizing away something to do with global modulator hardcoded envelope networks. But I don't know what.

                @Christoph-Hart - I'm kinda dead in the water on MacOS until I can figure this out. I have a build I need to send to a client. I suppose I could disable LTO for now, but this is verrrrryyyy strange. Would love to get to the bottom of it.

                Musician - Instrument Designer - Sonic Architect - Creative Product Owner
                Crafting sound at every level. From strings to signal paths, samples to systems.

                Christoph HartC 1 Reply Last reply Reply Quote 0
                • Christoph HartC
                  Christoph Hart @Orvillain
                  last edited by

                  @Orvillain yeah, that's really a weird issue - I can reproduce it but also just with the release configuration + LTO - any change to the build flags stop the crash.

                  I slightly rewrote the code and now it stopped crashing. I don't know why it fixes anything, but let me know if that helps.

                  OrvillainO 1 Reply Last reply Reply Quote 2
                  • OrvillainO
                    Orvillain @Christoph Hart
                    last edited by

                    @Christoph-Hart Yep, that has fixed it, thanks!!

                    Musician - Instrument Designer - Sonic Architect - Creative Product Owner
                    Crafting sound at every level. From strings to signal paths, samples to systems.

                    1 Reply Last reply Reply Quote 0
                    • OrvillainO Orvillain marked this topic as a question
                    • OrvillainO Orvillain has marked this topic as solved
                    • First post
                      Last post

                    20

                    Online

                    1.9k

                    Users

                    12.3k

                    Topics

                    107.0k

                    Posts