[erlang-patches] Reference count bugfix in erl_ddll
Jean-Sébastien Pédron
js.pedron@REDACTED
Wed Oct 11 15:25:09 CEST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
erl_ddll may contain a bug with reference count, here is an example:
1. Load a port driver on node `node1':
(node1@REDACTED)1> self().
<0.37.0>
(node1@REDACTED)2> erl_ddll:load_driver("/path/to/libs", my_drv).
ok
2. Start another shell on this same node and load the same driver:
(node1@REDACTED)1> self().
<0.44.0>
(node1@REDACTED)2> erl_ddll:load_driver("/path/to/libs", my_drv).
ok
The purpose here is to have separate processes using the same driver.
This can be verified by looking at the ddll_server status on `node1':
(node1@REDACTED)3> sys:get_status(ddll_server).
{status,<0.46.0>,
{module,gen_server},
[[{'$ancestors',[<0.37.0>]},
{'$initial_call',{gen,init_it,
[gen_server,
<0.37.0>,
self,
{local,ddll_server},
erl_ddll,
[],
[]]}}],
running,
<0.46.0>,
[],
[ddll_server,
{#Port<0.101>,[{my_drv,[{<0.44.0>,1},{<0.37.0>,1}]}]},
erl_ddll,
infinity]]}
We can see shell's PID listed with `my_drv'.
3. Now another shell on this same node and load the driver a third time:
(node1@REDACTED)1> self().
<0.55.0>
(node1@REDACTED)2> erl_ddll:load_driver("/path/to/libs", my_drv).
ok
If we look again at ddll_server's status:
(node1@REDACTED)4> sys:get_status(ddll_server).
{status,<0.46.0>,
{module,gen_server},
[[{'$ancestors',[<0.37.0>]},
{'$initial_call',{gen,init_it,
[gen_server,
<0.37.0>,
self,
{local,ddll_server},
erl_ddll,
[],
[]]}}],
running,
<0.46.0>,
[],
[ddll_server,
{#Port<0.101>,[{expat_drv,[{<0.55.0>,1},{<0.37.0>,1}]}]},
erl_ddll,
infinity]]}
The second shell (<0.44.0>) isn't listed anymore.
The consequence is that if the first and the last unload the driver, the
library `my_drv.so' will be unloaded and shell #2 port driver will
become unusable.
Attached is a patch that should fix this.
- --
Jean-Sébastien Pédron
Meetic Corp.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFFLPC1a+xGJsFYOlMRAqhtAKDHqFf4FL2bRrWtrlqYqa8waXFFLgCfe8g6
1NKNvNQJzZIzFN+HUGw9q7s=
=5JqK
-----END PGP SIGNATURE-----
More information about the erlang-patches
mailing list