[Mono-bugs] [Bug 73366][Maj] New - XplatUIX11 cannot handle concurrency in GDI calls.
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Fri, 4 Mar 2005 16:46:47 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by 4lw0e0402@sneakemail.com.
http://bugzilla.ximian.com/show_bug.cgi?id=73366
--- shadow/73366 2005-03-04 16:46:47.000000000 -0500
+++ shadow/73366.tmp.14459 2005-03-04 16:46:47.000000000 -0500
@@ -0,0 +1,36 @@
+Bug#: 73366
+Product: Mono: Class Libraries
+Version: unspecified
+OS: All
+OS Details: (all operating systems where the X11 XPlatUI driver is used)
+Status: NEW
+Resolution:
+Severity:
+Priority: Major
+Component: Windows.Forms
+AssignedTo: mono-bugs@ximian.com
+ReportedBy: 4lw0e0402@sneakemail.com
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: XplatUIX11 cannot handle concurrency in GDI calls.
+
+Description of Problem:
+ Windows requires that all calls related to windowing objects be done from
+ the same thread (this is an even stricter requirement than
+ synchronization). However, it does not require that for GDI calls. Any
+ user thread can, at any time, obtain a GC to any device and start working
+ with it. When mono's winforms are running under X11, the underlying
+ library is Xlib. This ends up being the transport for all GUI related
+ stuff, including System.Drawing calls related to windows. By default,
+ Xlib cannot handle concurrency, and the result is that when a user
+ thread calls Graphics.FromHwnd(Handle) and tries to draw using that
+ Graphics object, Xlib dies with an "unexpected asynchronous message"
+ error. This can be fixed by calling XInitThreads() once before all other
+ Xlib calls. The attached patch does this.
+
+Steps to reproduce the problem:
+ Without the patch, all GDI+ calls must be done from the windowing thread.
+ To reproduce the problem, display a form, and then attempt to draw
+ directly to its Handle from a secondary thread.