[Mono-list] Patch for GC_stop_world bug in Android apps
koush at koushikdutta.com
Fri Oct 1 12:31:09 EDT 2010
I submit this patch under the terms of the MIT/X11 license
On Fri, Oct 1, 2010 at 7:12 AM, Geoff Norton <gnorton at novell.com> wrote:
> Nice, can you please confirm on the list that you're willing to
> contribute this patch under the terms of the MIT/X11 license?
> On 2010-09-30, at 12:26 AM, Koushik Dutta wrote:
> Here is the fix for the following bug:
> The underlying problem is there is a bug in Android's libc, where after a
> process forks, the kernel id of the forked thread is not changed to reflect
> the new child thread. The pthread kernel id still points to the kernel id of
> the parent process: zygote.
> This bug breaks all multithread monodroid apps (as well as my mono on
> Android port), as Garbage Collection fails and the process hangs.
> The fix/workaround for the bug in Android is as follows:
> The GC_Thread structure on Android has a new "kernel_id" member. When
> GC_new_thread is called, the kernel id is also retrieved and stored with
> gettid. When the world needs to be stopped/started, a new function
> android_thread_kill is called, which is a reimplementation of Android's
> pthread_kill. Instead, which takes the correct kernel id, rather than the
> potentially hosed pthread.
> I have attached a patch file, as well as committed to my fork of mono on
> Mono-list maillist - Mono-list at lists.ximian.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Mono-list