Here is the fix for the following bug: https://bugzilla.novell.com/show_bug.cgi?id=633454
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: http://github.com/koush/mono/commit/414aff5598a2dea618741bea714fa8dd1baf0d52
pthread_android.patch
Description: Binary data
_______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
