123456789101112131415161718192021222324252627282930313233343536 |
- /*
- TEST_BUILD
- $C{COMPILE} $DIR/load-reentrant.m -o load-reentrant.exe
- $C{COMPILE} $DIR/load-reentrant2.m -o libload-reentrant2.dylib -bundle -bundle_loader load-reentrant.exe
- END
- */
- #include "test.h"
- #include <dlfcn.h>
- int state1 = 0;
- int *state2_p;
- OBJC_ROOT_CLASS
- @interface One @end
- @implementation One
- +(void)load
- {
- state1 = 111;
- // Re-entrant +load doesn't get to complete until we do
- void *dlh = dlopen("libload-reentrant2.dylib", RTLD_LAZY);
- testassert(dlh);
- state2_p = (int *)dlsym(dlh, "state2");
- testassert(state2_p);
- testassert(*state2_p == 0);
- state1 = 1;
- }
- @end
- int main()
- {
- testassert(state1 == 1 && state2_p && *state2_p == 2);
- succeed(__FILE__);
- }
|