Merge pull request #2753 from xmcclure/checked-build-updates
authormonojenkins <jo.shields+jenkins@xamarin.com>
Fri, 18 Mar 2016 22:00:34 +0000 (22:00 +0000)
committermonojenkins <jo.shields+jenkins@xamarin.com>
Fri, 18 Mar 2016 22:00:34 +0000 (22:00 +0000)
commit23fbdb66437357ec6d50f498ed8e88590cd89196
tree66e6dae83bf10676f2c0e3e16202a2590d9d2f85
parent4a1dbf8e225acb7f21994172324b791384827a8a
parent173e2d4ce65ca671a69b39011b71ff3de945c4f4
Merge pull request #2753 from xmcclure/checked-build-updates

Changes to "checked build" feature

Here are some changes to checked builds I made while trying to debug some coop gc problems. The changes made are:

- Replace the checked build configure flags with a single --enable-checked-build= flag
- Runtime environment variable required for checked build asserts to run
- Report the thread transition history for more kinds of asserts
- For the `mono_threads_reset_blocking` functions, add an assert that guarantees proper nesting

In addition to this, I have documented the checked build feature as implemented here, see my pull request for the website: https://github.com/mono/website/pull/187

Overall my goals with this patch were

- Make it easier to do rapid-fire testing with the checked builds (runtime switch, default-off)
- Make the checked build implementation more internally consistent (more uniform names etc)

Notice I do make the change that instead of checked build sub-features being disabled with a blacklist, you now must enable them with a whitelist. I think this is an improvement because it makes it easier to just casually keep a checked build around  (for one thing I would have the option to ship debug builds to users with the checked build modes included but dormant) but I could be talked out of it if this change turns out to be controversial. The only thing I feel strongly about is that if the configure flag is changed back to a blacklist the environment variable should switch to a blacklist also.

If we accept this change the CI bots will need to adopt the new configure flag and environment variable.
configure.ac