[Mono-dev] Opinion? On potential fix for a 6 year old bug....
Rob Wilkens
robwilkens at gmail.com
Sat Jun 2 01:28:20 UTC 2012
I've come up with as close to a good fix for Novell #321541 as I could
think of, and it works for the sample code provided in the bug report.
Ignore my comments on that report, i originally looked at the problem
wrong, and made some incorrect statements -- I haven't posted anything
current there.
Specifically: Bug Report: Application.Idle is sent to all threads
instead of just one.
Fix I have: I created an array of 101 [0 to 100] event handlers
(changeable by a const), which is indexed by
thread.currentthread.managedthreadid .. When each particular thread
would call the idle event handler, it now calls an indexed idle event
handler instead. Also, since i limited it to ~100 thread id's, if the
thread id is greater than 100, it assigns it to thread 1, which from
what i can tell is always the main thread. So if the Idle handler is
added by thread 1, only thread 1 will call it, if it's added by thread
3, only thread 3 will call it. IF it's added by thread 101, however, it
will fallback to calling that idle handler for thread 1 only which is
better than the current practice of delivering each idle event to all
threads.
Issues I have questions with:
(1) I have only tested with X11, but i had to modify the other drivers
slightly so that they call the thread indexed idle handlers. I am
confident that if it works for X11 it will work for other drivers,
because it doesn't change anything with interfacing, just message
processing. Can I submit this without testing on every possible
platform? If the suggestion is to submit it and see what happens, i'm
ok with that.
(2) I know an array isn't the most wonderful way to handle this, but i
couldn't figure out how to otherwise assign an event handler to, for
example, a hashtable entry. Perhaps I'm just stupid, but i think the
problem is that an EventHandler property, for example, doesn't have a
Get and Set, instead it has an Add and Remove. I couldn't find any
examples of this being done to model this on. Any opinions on this?
I'll try to sit on this until at least late tomorrow at minimum... If
anyone is willing to tell me "go ahead and submit the
commit/push/pull-request, and let someone review it", let me know. If I
don't hear anything, that's probably what i'll do anyway.
Oh, For convenience, here is the bug report link:
https://bugzilla.novell.com/show_bug.cgi?id=321541
-Rob
More information about the Mono-devel-list
mailing list