Bug 17290 - Use of ThreadLocal with struct causes memory leaks
Summary: Use of ThreadLocal with struct causes memory leaks
Alias: None
Product: Runtime
Classification: Mono
Component: GC ()
Version: 3.2.x
Hardware: PC Linux
: --- normal
Target Milestone: ---
Assignee: Bugzilla
Depends on:
Reported: 2014-01-17 06:33 UTC by mholenko
Modified: 2014-01-17 17:56 UTC (History)
3 users (show)

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

Sample solution generating memory leak (20.00 KB, application/x-tar)
2014-01-17 06:33 UTC, mholenko

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.

Please create a new report on GitHub or Developer Community with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:

Description mholenko 2014-01-17 06:33:25 UTC
Created attachment 5861 [details]
Sample solution generating memory leak

On Debian 64, linux 3.11.4.

When using ThreadLocal type in specific configuration there are visible memory leaks in the application.
Issue is confirmed to occur both on sgen and boehm GC, the difference is in the speed of memory usage growth. 

Step to Duplicate:

1. Open sample solution attached to this report and build it.

2. Start it under sgen or boehm (mono --gc=boehm Threader.exe or mono --gc=sgen Threader.exe)

3. Observe process memory usage changing in time (with system monitor or just ps command).

What is interesting, commenting out the field 'tli' in ExampleClass fixes the problem same as removing one field in ExampleStruct (in fact it seems that structs of size 12 bytes or more causes problems).
Comment 1 Rodrigo Kumpera 2014-01-17 16:12:05 UTC
working on it.
Comment 2 Rodrigo Kumpera 2014-01-17 17:56:39 UTC
Fixed in master.