www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - prevent multiple calls to rt_term

reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
Hello.

In Pyd, I am trying to get python extension libraries working, but this 
requires building shared libraries with D. LDC works adequately for 
this, if you don't mind not having module constructors or unittests; 
however, in the presence of multiple shared libraries coordinating 
rt_init and rt_term seems to be an issue.

Currently, I have each shared lib calling rt_init in _init and rt_term 
in _fini. I would like to know if druntime supports a way to detect if 
it is running.

For rt_term, I have been using rt.dmain2.isHalting, but that seems to 
have gone away in more recent druntime, and anyways doesn't seem to be 
working for me.

I wonder if it would make more sense to call rt_init and rt_term in the 
druntime shared lib's _init and _fini?
Aug 13 2012
parent reply Sean Kelly <sean invisibleduck.org> writes:
Sounds like what's needed is a call counter, so if rt_init is called N times=
, rt_term must be called N times before the runtime really terminates.=20

On Aug 13, 2012, at 1:14 PM, Ellery Newcomer <ellery-newcomer utulsa.edu> wr=
ote:

 Hello.
=20
 In Pyd, I am trying to get python extension libraries working, but this re=
quires building shared libraries with D. LDC works adequately for this, if y= ou don't mind not having module constructors or unittests; however, in the p= resence of multiple shared libraries coordinating rt_init and rt_term seems t= o be an issue.
=20
 Currently, I have each shared lib calling rt_init in _init and rt_term in _=
fini. I would like to know if druntime supports a way to detect if it is run= ning.
=20
 For rt_term, I have been using rt.dmain2.isHalting, but that seems to have=
gone away in more recent druntime, and anyways doesn't seem to be working f= or me.
=20
 I wonder if it would make more sense to call rt_init and rt_term in the dr=
untime shared lib's _init and _fini?
Aug 13 2012
parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 08/13/2012 01:19 PM, Sean Kelly wrote:
 Sounds like what's needed is a call counter, so if rt_init is called N times,
rt_term must be called N times before the runtime really terminates.
is it valid to call rt_init more than once?
Aug 13 2012
parent reply Sean Kelly <sean invisibleduck.org> writes:
On Aug 13, 2012, at 2:07 PM, Ellery Newcomer <ellery-newcomer utulsa.edu> wr=
ote:

 On 08/13/2012 01:19 PM, Sean Kelly wrote:
 Sounds like what's needed is a call counter, so if rt_init is called N ti=
mes, rt_term must be called N times before the runtime really terminates.
=20
=20 is it valid to call rt_init more than once?
Not currently.=20=
Aug 13 2012
parent Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 08/13/2012 03:37 PM, Sean Kelly wrote:
 On Aug 13, 2012, at 2:07 PM, Ellery Newcomer <ellery-newcomer utulsa.edu>
wrote:

 On 08/13/2012 01:19 PM, Sean Kelly wrote:
 Sounds like what's needed is a call counter, so if rt_init is called N times,
rt_term must be called N times before the runtime really terminates.
is it valid to call rt_init more than once?
Not currently.
I guess if it were made valid then module constructors would still be out? IE if N shared libraries bring N sets of modules to the table and rt_init is called N times, then what's to prevent some module constructors from being run more than once?
Aug 13 2012