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

Attachment: pthread_android.patch
Description: Binary data

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to