target.c   [plain text]


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <unistd.h>
#include <dispatch/dispatch.h>

#include "test_support.h"

int main(int argc, const char* argv[], const char* envp[], const char* apple[]) {
    signal(SIGUSR1, SIG_IGN);
    dispatch_source_t signalSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_PROC, getppid(),
                                                            DISPATCH_PROC_EXIT, dispatch_get_main_queue());
    dispatch_source_set_event_handler(signalSource, ^{
        exit(0);
    });
    dispatch_resume(signalSource);

    dispatch_async(dispatch_get_main_queue(), ^{
            LOG("target starting");
            usleep(1000);
            // load and unload in a loop
            for (int i=1; i < 10000; ++i) {
                void* h = dlopen("./libfoo.dylib", 0);
                usleep(100000/(i*100));
                dlclose(h);
            }
            LOG("target done");
    });

    dispatch_main();
}