-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a COB_LOAD_GLOBAL config option to modify dlopen
behavior
#209
base: gcos4gnucobol-3.x
Are you sure you want to change the base?
Add a COB_LOAD_GLOBAL config option to modify dlopen
behavior
#209
Conversation
Apart from the other PR's review to that branch, the change here makes the current scenario even more confusing. After the changes:
@florianschmidt1994 can you please inspect the libtool variant (to test this you can simply undefine |
Yup, I'll check it out. Basically something like this, right? static void* cob_dlopen(const char* filename) {
#ifdef _WIN32
if (x == NULL) {
return GetModuleHandle (NULL);
}
return LoadLibrary(x);
#elif defined(USE_LIBDL)
int flags = cobsetptr->cob_load_global
? RTLD_LAZY | RTLD_GLOBAL
: RTLD_LAZY | RTLD_LOCAL;
return dlopen(filename, flags);
# else
// TODO: initialise lt_dladvise
lt_dlopenadvise(filename, /*advise here*/);
} |
@GitMensch I've tried out your suggestion in the latest commit and temporarily defined |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice update, we may be able to push that soon
Note: we still need the testcase addition - does not need to be something that benefit from this as this is hard to make portable - just do a simple CALL and CANCEL. We should have an easy one for COB_LOAD_CASE
f6aa350
to
ab26e16
Compare
When developing, I've noticed some test failures, where some of them might be related to our change. On the latest commit of this repositories "main branch" (
In the first version of this PR (bd80e8c), there is an additional test failure (781) when using
In history up to the latest commit (62de625), there exists a fix (see 1f4d607), the same that is already applied in WIN32 environments, to fix this.
|
dlopen
behaviordlopen
behavior
This PR adds a config option called
COB_LOAD_GLOBAL
which allows the flags ofdlopen
used incall.c
to be changed betweenRTLD_GLOBAL
andRTLD_LOCAL
(see https://linux.die.net/man/3/dlopen)Motivation
This flag is motivated by an ambition to be able to write a multi-threaded c program, that then loads
libcob
withdlmopen
in one namespace per thread, effectively allowing us to call the same libcob / Cobol module from multiple threads in a "thread-safe" way. The image below shows the a very simplified intended call sequenceBecause there is a "bug" in dlopen that stops us from calling
dlopen("module", RTLD_GLOBAL)
, this PR introduces an option to be able to change this flag toRTLD_LOCAL
at runtime.Docs
Implementation
lt_dlopen
from a macro definition to an actual function, which internally calls dlopen with the flags based on the configuration