Wolfgang Thallergcc-9.16fbf4227 years agoHistory
63 lines · 1.3 KB · D
RawDownload
import core.runtime;import core.stdc.stdio;import core.stdc.string;import core.thread;import core.sys.posix.dlfcn; void runTest(){    Object obj;    obj = Object.factory("lib.MyFinalizer");    assert(obj.toString() == "lib.MyFinalizer");    obj = Object.factory("lib.MyFinalizerBig");    assert(obj.toString() == "lib.MyFinalizerBig");} class NoFinalize{    size_t _finalizeCounter;     ~this()    {        ++_finalizeCounter;    }} class NoFinalizeBig : NoFinalize{    ubyte[4096] _big = void;} extern (C) alias SetFinalizeCounter = void function(shared(size_t*)); void main(string[] args){    auto name = args[0] ~ '\0';    const pathlen = strrchr(name.ptr, '/') - name.ptr + 1;    name = name[0 .. pathlen] ~ "lib.so";     auto h = Runtime.loadLibrary(name);    assert(h !is null);     auto nf1 = new NoFinalize;    auto nf2 = new NoFinalizeBig;     shared size_t finalizeCounter;    auto setFinalizeCounter = cast(SetFinalizeCounter)dlsym(h, "setFinalizeCounter");    setFinalizeCounter(&finalizeCounter);     runTest();    auto thr = new Thread(&runTest);    thr.start();    thr.join();     auto r = Runtime.unloadLibrary(h);    if (!r)        assert(0);    if (finalizeCounter != 4)        assert(0);    if (nf1._finalizeCounter)        assert(0);    if (nf2._finalizeCounter)        assert(0);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t