Fix periodic crash on Monodroid appdomain unload #129
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When the Designer unloads the Monodroid assembly, mono_java_gc_bridge_info continues pointing to data in the now-invalid assembly image. This currently causes a semi-consistent crash in the Designer tests because the appdomain is unloaded and then reloaded, create_domain (which creates the AppDomain managed object, and therefore implicitly depends on mono_java_gc_bridge_info) is called before init_android_runtime (which populates mono_java_gc_bridge_info with the new data).
The solution is to clear mono_java_gc_bridge_info when Monodroid is unloaded. This means all objects will be marked transparent until a new Monodroid is loaded, which is fine because only pure C# objects are being created anyway if Monodroid is unloaded (with one edge case which may still need to be fixed-- see the FIXME comment in this commit).