# Leak stuff

**URL:** <https://www.ruby-forum.com/t/leak-stuff/136213>\
**Category:** Ruby\
**Created:** [April 29, 2008, 9:12pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213 "2008-04-29T21:12:51Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 29, 2008, 9:12pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213/1 "2008-04-29T21:12:51Z")

</div>

Has anything being done on these?

def leak  
“name”.split(/::/)  
end

loop {leak} # leaks

loop do  
rand(10000000).to\_s.to\_sym # leaks  
end

?  
-R

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 29, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213/2 "2008-04-29T21:24:06Z")

</div>

On Apr 29, 2008, at 1:12 PM, Roger P. wrote:

> Has anything being done on these?
> 
> def leak  
> “name”.split(/::/)  
> end
> 
> loop {leak} # leaks

To answer my own question.  
[http://rubyforge.org/tracker/?func=detail&atid=1698&aid=15425&group\_id=426](http://rubyforge.org/tracker/?func=detail&atid=1698&aid=15425&group_id=426)  
It appears to still be a leak in Ruby, though fixed. It occurs  
whenever you have a regexp replace [?] within a function with no  
variables, or something like that.

> loop do  
> rand(10000000).to\_s.to\_sym # leaks  
> end  
> This one is also still in Ruby, I believe.

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 29, 2008, 10:17pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213/3 "2008-04-29T22:17:13Z")

</div>

Roger P. wrote:

> > loop do  
> > rand(10000000).to\_s.to\_sym # leaks  
> > end  
> > This one is also still in Ruby, I believe.

Not a leak. Symbols are not collectable.

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 30, 2008, 12:33am UTC](https://www.ruby-forum.com/t/leak-stuff/136213/4 "2008-04-30T00:33:08Z")

</div>

On Wed, 30 Apr 2008 05:16:34 +0900, Joel VanderWerf  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Roger P. wrote:
> 
> > > loop do  
> > > rand(10000000).to\_s.to\_sym # leaks  
> > > end  
> > > This one is also still in Ruby, I believe.
> 
> Not a leak. Symbols are not collectable.

It depends on the Ruby implementation.

-mental

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 30, 2008, 1:35am UTC](https://www.ruby-forum.com/t/leak-stuff/136213/5 "2008-04-30T01:35:07Z")

</div>

MenTaLguY wrote:

> On Wed, 30 Apr 2008 05:16:34 +0900, Joel VanderWerf [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > Roger P. wrote:
> > 
> > > > loop do  
> > > > rand(10000000).to\_s.to\_sym # leaks  
> > > > end  
> > > > This one is also still in Ruby, I believe.  
> > > > Not a leak. Symbols are not collectable.
> 
> It depends on the Ruby implementation.

Is that changing in MRI?

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 30, 2008, 9:31pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213/6 "2008-04-30T21:31:04Z")

</div>

> def leak  
> “name”.split(/::/)  
> end
> 
> loop {leak} # leaks

This leaks too. Not sure if it’s related or not.

def grow  
for i in 1…100  
eval “b#{i}=1”  
end  
end  
15000.times {grow}

from [http://pennysmalls.com/](http://pennysmalls.com/)

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [April 30, 2008, 10:14pm UTC](https://www.ruby-forum.com/t/leak-stuff/136213/7 "2008-04-30T22:14:34Z")

</div>

> This leaks too. Not sure if it’s related or not.
> 
> def grow  
> for i in 1…100  
> eval “b#{i}=1”  
> end  
> end  
> 15000000.times {grow}  
> Appears that it was the same bug.  
> Attached is a patch which works at least on linux, but not on mac os  
> [for some  
> reason–maybe mine dynamically links to an old copy or something].  
> -R

# Index: parse.y

— parse.y (revision 16244)  
+++ parse.y (working copy)  
@@ -5821,7 +5821,8 @@  
if (!(ruby\_scope-\>flags & SCOPE\_CLONE))  
xfree(ruby\_scope-\>local\_tbl);  
}

- 

```
      ruby_scope->local_tbl = local_tbl();

```

- 

```
       ruby_scope->local_vars[-1] = 0;

```

- 

```
       ruby_scope->local_tbl = local_tbl();
  }

```

}  
local\_pop();
