# DL.callback as free function causes errors

**URL:** <https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170>\
**Category:** Development\
**Created:** [March 18, 2007, 2:43am UTC](https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170 "2007-03-18T02:43:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![sheepman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d07c76/32.png) [@sheepman](https://www.ruby-forum.com/u/sheepman)\
**Post date:** [March 18, 2007, 2:43am UTC](https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170/1 "2007-03-18T02:43:28Z")

</div>

ã“ã‚“ã«ã¡ã¯ã€sheepman ã§ã™ã€‚

DL::PtrData ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã§ã¯ ruby ãŒ GC ã‚’ã™ã‚‹æ™‚ã«å‘¼ã¶  
free function ã‚’æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

ã§ã€ãŸã¨ãˆã° regex ãƒ©ã‚¤ãƒ–ãƒ©ãƒªã ã¨ regfree ã—ãŸã‚ã¨ã«ã€  
free ã‚’å‘¼ã³ãŸã„ã®ã§ã€ä»¥ä¸‹ã®ã‚ˆã†ãª DL.callback ã‚’ä½¿ã£ãŸã‚³ãƒ¼ãƒ‰ã‚’  
æ›¸ããŸããªã‚Šã¾ã™ã€‚

require ‘dl’  
include DL

h = dlopen(nil)  
regcomp = h.sym(‘regcomp’, ‘IPSI’)  
regfree = h.sym(‘regfree’, ‘0P’)

free = callback(‘0P’){|ptr|  
regfree[ptr]  
FREE[ptr]  
}  
100000.times do |i|  
ptr = PtrData.malloc(50, free)  
regcomp.call(ptr, ‘123’, 0)  
end

ã—ã‹ã—ã€ã“ã‚Œã¯ segv ã—ã¾ã™ã€‚åŽŸå› ã‚’æ­£ç¢ºã«è¿½ã†ã“ã¨ãŒã§ãã¦ã„ãªã„ã®ã§ã™ãŒã€  
ãŠãã‚‰ã GC ã®çœŸæœ€ä¸­ã«ãƒ–ãƒ­ãƒƒã‚¯ãŒå‘¼ã°ã‚Œã‚‹ã“ã¨ã§èµ·ãã¦ã„ã‚‹ã‚“ã ã¨æ€ã„ã¾ã™ã€‚

ã¨ã„ã†ã‚ã‘ã§ã€DL::Symbol ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«callbackã‹ã©ã†ã‹ã®ãƒ•ãƒ©ã‚°ã‚’æŒãŸã›ã¦ã€  
callback ã¯ PtrData ã® free é–¢æ•°ã¨ã—ã¦æŒ‡å®šã§ããªã„ã‚ˆã†ã«ãƒ‘ãƒƒãƒã‚’æ›¸ã„ã¦ã¿ã¾ã—ãŸã€‚

segv ã—ã¦ã„ã‚‹åŽŸå› ãŒé•ã£ã¦ã„ã‚‹ãªã‚‰ã€ã“ã®ãƒ‘ãƒƒãƒã¯ç„¡ç”¨ã®ã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚

---

<div class="post-metadata">

**Author:** ![sheepman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d07c76/32.png) [@sheepman](https://www.ruby-forum.com/u/sheepman)\
**Post date:** [March 18, 2007, 3:47am UTC](https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170/2 "2007-03-18T03:47:33Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sun, 18 Mar 2007 10:43:11 +0900,  
sheepman wrote in [ruby-dev:30620]:

> DL::PtrData e$B%\*%V%8%’%/%H$G$Oe(B ruby e$B$,e(B GC e$B$r$9$k;~$K8F$Ve(B  
> free function e$B$r;XDj$9$k$3$H$,$G$-$^$9!#e(B

e$BJ9$/$+$i$K4m81$=$&$J5!G=$G$9$,!#e(B

> e$B$7$+$7!"$3$l$Oe(B segv e$B$7$^$9!#860x$r@53N$KDI$&$3$H$,$G$-$F$$$J$$$N$G$9$,!"e(B  
> e$B$\*$=$i$/e(B GC e$B$N??:GCf$K%V%m%C%/$,8F$P$l$k$3$H$G5/$-$F$$$k$s$@$H;W$$$^$9!#e(B
> 
> e$B$H$$$&$o$1$G!"e(BDL::Symbol e$B%\*%V%8%’%/%H$Ke(Bcallbacke$B$+$I$&$+$N%U%i%0$r;}$?$;$F!"e(B  
> callback e$B$Oe(B PtrData e$B$Ne(B free e$B4X?t$H$7$F;XDj$G$-$J$$$h$&$K%Q%C%A$r=q$$$F$\_$^$7$?!#e(B

callbacke$B$Oe(Bfinalizere$B$KJQ49$7$FEPO?$9$k!"$H$$$&$N$O$I$&$G$7$g$&$+!#e(B  
finalizere$B$Oe(BGCe$B=\*N;D\>8e$K\<B9T$5$l$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![sheepman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d07c76/32.png) [@sheepman](https://www.ruby-forum.com/u/sheepman)\
**Post date:** [March 18, 2007, 10:31am UTC](https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170/3 "2007-03-18T10:31:55Z")

</div>

e$B$3$s$P$s$O!"e(Bsheepman e$B$G$9!#e(B

On Sun, 18 Mar 2007 11:46:59 +0900  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> callbacke$B$Oe(Bfinalizere$B$KJQ49$7$FEPO?$9$k!"$H$$$&$N$O$I$&$G$7$g$&$+!#e(B  
> finalizere$B$Oe(BGCe$B=\*N;D\>8e$K\<B9T$5$l$^$9!#e(B

e$B9M$($F$\_$?$s$G$9$,!"$I$&e(B finalizer  
e$B$r;H$($PNI$$$N$+$o$+$j$^$;$s$G$7$?!#e(B

---

<div class="post-metadata">

**Author:** ![sheepman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d07c76/32.png) [@sheepman](https://www.ruby-forum.com/u/sheepman)\
**Post date:** [March 20, 2007, 3:07pm UTC](https://www.ruby-forum.com/t/dl-callback-as-free-function-causes-errors/89170/4 "2007-03-20T15:07:48Z")

</div>

sheepman wrote:

> DL::PtrData e$B%\*%V%8%’%/%H$G$Oe(B ruby e$B$,e(B GC e$B$r$9$k;~$K8F$Ve(B  
> free function e$B$r;XDj$9$k$3$H$,$G$-$^$9!#e(B
> 
> e$B$G!"$?$H$($Pe(B regex e$B%i%$%V%i%j$@$He(B regfree e$B$7$?$"$H$K!"e(B  
> free e$B$r8F$S$?$$$N$G!"0J2\<$N$h$&$Je(B DL.callback e$B$r;H$C$?%3!\<%I$re(B  
> e$B=q$-$?$/$J$j$^$9!#e(B

e$B$J$k$[$I!#e(B

> e$B$H$$$&$o$1$G!"e(BDL::Symbol e$B%\*%V%8%’%/%H$Ke(Bcallbacke$B$+$I$&$+$N%U%i%0$r;}$?$;$F!“e(B  
> callback e$B$Oe(B PtrData e$B$Ne(B free e$B4X?t$H$7$F;XDj$G$-$J$$$h$&$K%Q%C%A$r=q$$$F$\_$^$7$?!#e(B  
> segv e$B$7$F$$$k860x$,0c$C$F$$$k$J$i!”$3$N%Q%C%A$OL5MQ$N$b$N$K$J$j$^$9!#e(B

e$B9\*$/2r7h$G$-$k$^$G$O!"$R$H$^$:%Q%C%A$r\<u$1F~$l$F;XDj$G$-$J$$$h$&$K$7$F$\*$3$&$H;W$$$^$9!#e(B
