Actually, in case an SWT application is running, this conversion may not
work as expected. Should we possibly perform an isKindOfClass check, and
if it's not our application class, use the previous approach (i.e. spin
a single empty block through the event loop)?
Otherwise the fix looks fine.
On 6/15/2012 9:06 PM, Leonid Romanov wrote:
> I've adressed your comments
> in http://cr.openjdk.java.net/~leonidr/7124239/webrev.01/ > More specifically:
> 1. Removed )
> 2. After some consideration I've decided to use timestamp in order to
> distinguish our event from others: seems like it's the most bulletproof
> 3. You could be right. I've replaced the loop with NSConditionLock
> On 14.06.2012, at 19:12, Anthony Petrov wrote:
>> Hi Leonid,
>> 1. In NSApplicationAWT: the NSLog("Here...") statements. I use such
>> debugging output, too! :) However, for production code please either
>> replace them with meaningful messages, or remove them altogether.
>>> 344 - (void)sendEvent:(NSEvent *)event
>> I'm afraid that using the NSApplicationDefined and just skipping it
>> may conflict with other native toolkits, such as SWT, or some custom
>> native libraries. I think we should let such events go through the
>> [super sendEvent].
>> 3. Isn't the loop in LWCToolkit.m too tight? There's an issue with
>> performSelector on the Mac in that selectors are processed strictly
>> before processing events. If the queue is flooded with posted
>> selectors, the event may never have a chance to be handled.
>> best regards,
>> On 06/14/12 08:25, Leonid Romanov wrote:
>>> Please review a fix for 7124239: [macosx]
>>> sun.awt.SunToolkit.InfiniteLoop exception in realSync called from
>>> The problem is that syncNativeQueue() doesn't fully sync the native
>>> queue. For example, if there are, say, 25 events in the native queue
>>> waiting to be processed, nativeSyncQueue might return after only one
>>> event has been processed. realSync() calls syncNativeQueue() in a
>>> loop until nativeSyncQueue() reports that no native events have been
>>> processed as the result of the call or the maximum number of
>>> iterations (which is 20) has been exceeded (which leads to the
>>> exception). And since there are more than 20 events in the native
>>> queue, we get the exception.
>>> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7124239 >>> Webrev: http://cr.openjdk.java.net/~leonidr/7124239/webrev.00/ >>>