[Mono-list] Patch for GC_stop_world bug in Android apps
gnorton at novell.com
Fri Oct 1 10:12:04 EDT 2010
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 Github:
> Mono-list maillist - Mono-list at lists.ximian.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Mono-list