-
Notifications
You must be signed in to change notification settings - Fork 36
Add a COB_LOAD_GLOBAL config option to modify dlopen behavior
#209
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
base: gitside-gnucobol-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 |
GitMensch
left a comment
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
|
Codecov ReportAttention: Patch coverage is
❗ Your organization needs to install the Codecov GitHub app to enable full functionality. Additional details and impacted files@@ Coverage Diff @@
## gcos4gnucobol-3.x #209 +/- ##
=====================================================
- Coverage 67.85% 67.58% -0.28%
=====================================================
Files 33 33
Lines 60458 60827 +369
Branches 15821 15896 +75
=====================================================
+ Hits 41026 41109 +83
- Misses 13567 13847 +280
- Partials 5865 5871 +6 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
8871e45 to
3234374
Compare
GitMensch
left a comment
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.
I hope to reinspect that PR soon, ideally after looking over CANCEL in general.
Can you please do the minor and cosmetic changes outlined in this review and rebase afterwards?
| $b for executable basename, $d for date in YYYYMMDD format, $t for time | ||
| in HHMMSS format (before, only $$ was available for pid) | ||
|
|
||
| ** introduction of the COB_LOAD_GLOBAL boolean flag, which determines whether |
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.
that's a text block with sentences, which needs to start upper-case; but maybe go with a short entry as text, then a double-colon and newline, then more explanatory text (this could stay as sentences) afterwards, in any case the full-stops should be outside of the quotes :-)
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.
I'll move the full stop. As for the other parts, I can capitalize the first word, but that would break with most other blocks in NEWS, which all start with lowercase letters. Are we sure this is how we want to do it here?
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.
only sentences should start with an upper-case and be ended with a period, but you can add a short summary of that change in all lower without a period to start it (kind of a headline)
|
Friendly ping @florianschmidt1994 |
|
@florianschmidt1994 thanks for the updates. Please use the CI generated tarball, to check if your original setup that needed that change (a java starter running the same process more than once) still works. Deep-link to the CI generated source distribution: https://github.com/OCamlPro/gnucobol/actions/runs/16163870452/artifacts/3493326773 Also: can you please create a minimal runner in C that we can add to the testsuite that mimics your java starter? |
6d37deb to
23415a2
Compare
|
The "coverage" titled test fails for C89 compat reasons: To reproduce that locally compile it with |
|
and the MSYS1 entries error because of missing pthread support: It is fine to skip this test on MSYS1. To do so add # skip test for MSYS1 - we don't have pthread there
# FIXME: make that test more portable
AT_SKIP_IF([test "$OSTYPE" = "msys"])at the start of the test. |
|
Thanks for the hints @GitMensch. I've also disabled the tests on macOS, as there is no Test runs on Windows (e.g. https://github.com/OCamlPro/gnucobol/actions/runs/17068765301/job/48392123249?pr=209) say Do you know if we might need to call the compiler arguments differently to make it more portable across platforms? Also there's an issue with help2man in the Windows MSYS2 prepare workflow (https://github.com/OCamlPro/gnucobol/actions/runs/17069516851/job/48394605655?pr=209) that I don't quite understand, yet. Any ideas? |
22ff3e9 to
eedf0d8
Compare
Use |
4743ed6 to
b93afd1
Compare
0881a6a to
7ecb2a9
Compare
|
@florianschmidt1994 Can you please rebase? |
using the more important part "default changed" first, more explanation
…aded usage of libcob from c code
…pen test if dependencies do not exist Signed-off-by: Oguzcan Kirmemis <[email protected]>
…BAL dlmopen test if dependencies do not exist" This reverts commit 9a53df2.
4f13276 to
49a99a8
Compare
test cleanup
|
just adding myself to the thread to get notifications, @GitMensch you can ofc ping me if we need any further changes here |
This PR adds a config option called
COB_LOAD_GLOBALwhich allows the flags ofdlopenused incall.cto be changed betweenRTLD_GLOBALandRTLD_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
libcobwithdlmopenin 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_LOCALat runtime.Docs
Implementation
lt_dlopenfrom a macro definition to an actual function, which internally calls dlopen with the flags based on the configuration