On Thursday, 17 September 2015 at 21:13:46 UTC, bitwise wrote:
On Thursday, 17 September 2015 at 20:47:49 UTC, Jacob Carlborg wrote:
On 2015-09-17 21:42, bitwise wrote:

Ok, but this kinda defeats the purpose, as the op wants to unload the
library ;)

He said he doesn't want dlopen to crash, if it doesn't unload it fixes the problem ;)

True. Looking at his bug report now, it seems his dylib is a VST plugin. Had he just said that to begin with, this conversation would have been a lot easier -_-

The op shouldn't have to actually modify druntime in this case. He shouldn't have to replace "_dyld_register_func_for_add_image".

He can simply create a second empty callback in VSTPluginMain which will pin his library:

static bool didInitRuntime = false;

const char* ignoreImageLoad(
    enum dyld_image_states state,
    uint32_t infoCount,
    const struct dyld_image_info info[])
{
    // ignore.
}

extern(C) void* VSTPluginMain(void* hostCallback)
{
    import core.runtime;

    if(!didInitRuntime)
    {
        Runtime.initialize();
        dyld_register_image_state_change_handler(
            dyld_image_state_initialized,
            &ignoreImageLoad);
        didInitRuntime = true;
    }

    import std.stdio;
    import core.stdc.stdio;
    printf("Hello !\n");

    // Runtime.terminate();
    return null;
}

    Bit

Much success.
Not only did this work, it worked (around) right away!

Final patch here:
https://github.com/p0nce/dplug/commit/7dc6385ebb8147cc53cfe69bfd54e41f5341e158

Thanks to you all and I will for sure include your name in the release notes.
You removed a huge roadblock on my path to being relevant.


Reply via email to