Bug 13552 - Memory leak in CyclicDeque class when growing
Summary: Memory leak in CyclicDeque class when growing
Status: RESOLVED FIXED
Alias: None
Product: Class Libraries
Classification: Mono
Component: mscorlib (show other bugs)
Version: unspecified
Hardware: All All
: --- normal
Target Milestone: Untriaged
Assignee: Marek Safar
URL:
Depends on:
Blocks:
 
Reported: 2013-07-29 05:35 UTC by Vlad
Modified: 2015-09-21 11:08 UTC (History)
3 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description Vlad 2013-07-29 05:35:08 UTC
Code to reproduce the problem:

var list=new CyclicDeque<object>();
int c = 0;
var obj = new object();
while (true)
{
 list.PushBottom(obj);
 list.PopBottom(out obj);
 if (++c == 100) GC.Collect();
}


Workaround:

var list=new CyclicDeque<object>();
int c = 0;
var obj = new object();
list.PushBottom(s);
while (true)
{
 list.PushBottom(obj);
 list.PopBottom(out obj);
 if (++c == 100) GC.Collect();
}
Comment 1 Vlad 2013-07-29 06:08:02 UTC
It seems like there is a bug at this line in PushBottom:
"if (b - upperBound >= a.Size - 1)"
In single thread access this works fine:
"if ((b - top) - upperBound >= a.Size - 1)"
Comment 2 Vlad 2013-07-29 06:21:31 UTC
better: if ((b - top) - upperBound >= a.Size)
Comment 3 Vlad 2013-08-17 03:50:23 UTC
Anyone? No comments at all? This bug breaks ConcurrentBag!
Comment 4 Marek Safar 2013-08-17 10:32:51 UTC
Applied suggested fix

Note You need to log in before you can comment on or make changes to this bug.