Anthony wrote:
> OK. So let me get it straight: it didn't work before with SWT, and for now 
> it's not going to work even with my fix? But my fix itself does not worsen 
> things up when running with SWT anyway, right? Is this all correct?
Yes. That all is completely true. 

> No, why? We don't want to export AWTAutoShutdown. Now that AWT will send keep 
> alive pings after my fix, SWT, if they want to, could simply listen to these 
> pings (using the run loop observers), and return false from the 
> shell.isDisposed() at least for 1 second after the last keep-alive ping. This 
> will enable both SWT and AWT to co-exist, prevent any hangs, and allow both 
> of them to terminate w/o problems when both are finished.

Yes. This solution is much better than what I was thinking about.

With best regards. Petr. 

On Jan 11, 2013, at 3:57 PM, Anthony Petrov wrote:

> On 1/10/2013 20:23, Petr Pchelko wrote:
>> Sergey wrote:
>>>> As far as I understand from the discussion SWT doesn't survive situation, 
>>>> when we open 2 window(SWT and AWT) and close SWT window first. Since in 
>>>> this case SWT stops appkit run loop. This fix works in this case and this 
>>>> means that we should apply the same patch to SWT.
>>>> Petr, can you clarify this? Thanks
>> I have applied the patch and tried a little example with SWT Window and AWT 
>> Frame. The app still hangs in case the SWT Frame is closed first. The 
>> problem is that in SWT the common pattern is to put such code to the end of 
>> main:
>> while (!shell.isDisposed()) {
>>            if (!display.readAndDispatch()) display.sleep();
>> }
>> display.dispose();
>> //end of main function
>> (It is so common that it is in the first helloworld example in the SWT 
>> documentation)
>> So, SWT does not care about the native events, it shuts down as soon as 
>> Shell gets disposed. The main thread finishes and AWT hangs. I don't think 
>> we could fix the issue in AWT, but there is a simple workaround to add a 
>> dispose listener to the shell which would spin the runloop until 
>> AWTAutoShutdown.isReadyToShutdown, so it could be fixed in SWT. However, the 
>> case when AWT and SWT windows are opened simultaneously is so likely to 
>> produce deadlocks that I am not sure we want to support this case at all. 
>> JDK6 does not.
> 
> OK. So let me get it straight: it didn't work before with SWT, and for now 
> it's not going to work even with my fix? But my fix itself does not worsen 
> things up when running with SWT anyway, right? Is this all correct?
> 
> 
>> As for the embedded case, the issue with shutdown is fixed on the SWT side, 
>> however, making the AWTAutoShutdown method public would allow to make the 
>> solution better. 
> 
> No, why? We don't want to export AWTAutoShutdown. Now that AWT will send keep 
> alive pings after my fix, SWT, if they want to, could simply listen to these 
> pings (using the run loop observers), and return false from the 
> shell.isDisposed() at least for 1 second after the last keep-alive ping. This 
> will enable both SWT and AWT to co-exist, prevent any hangs, and allow both 
> of them to terminate w/o problems when both are finished.
> 
> But this is unrelated to the AWT side of things. This is a possible 
> enhancement for the SWT itself.
> 
> --
> best regards,
> Anthony
> 
>> With best regards. Petr. This fix actually does not help in the case when 
>> SWT On Jan 10, 2013, at 6:24 PM, Petr Pchelko wrote:
>>> Yes. SWT did not survive in such a situation. A will try to apply the fix 
>>> and test if it helps with the SWT.
>>> 
>>> With best regards. Petr.
>>> 
>>> On Jan 10, 2013, at 6:13 PM, Sergey Bylokhov wrote:
>>> 
>>>> 10.01.2013 17:55, Anthony Petrov wrote:
>>>>> Thanks Petr. I think we don't want to do the same in FX because we don't 
>>>>> even want to call any AWT APIs from there in the first place. Instead, my 
>>>>> current solution offers a way to terminate both toolkits graciously.
>>>> As far as I understand from the discussion SWT doesn't survive situation, 
>>>> when we open 2 window(SWT and AWT) and close SWT window first. Since in 
>>>> this case SWT stops appkit run loop. This fix works in this case and this 
>>>> means that we should apply the same patch to SWT.
>>>> Petr, can you clarify this? Thanks
>>>>> Sergey, does this resolve your concern?
>>>>> 
>>>>> -- 
>>>>> best regards,
>>>>> Anthony
>>>>> 
>>>>> On 12/28/12 23:06, Petr Pchelko wrote:
>>>>>> Hello.
>>>>>> 
>>>>>> As I understood while implementing the EmbeddedFrame, when we embed AWT 
>>>>>> into SWT, SWT did not care if AWT is OK to terminate, SWT just called 
>>>>>> dispose() for a frame and terminated without looking at AWT. This 
>>>>>> resulted in issues when AWT was still terminating but the main SWT 
>>>>>> thread was already finished. When AWT was calling something to 
>>>>>> synchronously perform selectors on the main thread deadlocks occurred. 
>>>>>> So we had to add a dispose listener to the SWT container, which spinned 
>>>>>> the main runloop until AWT frame finished disposing.
>>>>>> 
>>>>>> However, I may have misunderstood something.
>>>>>> 
>>>>>> With best regards, Petr.
>>>>>> 
>>>>>> 28.12.2012, в 20:58, Anthony Petrov<[email protected]>  
>>>>>> написал(а):
>>>>>> 
>>>>>>> On 12/28/2012 20:36, Sergey Bylokhov wrote:
>>>>>>>>> http://cr.openjdk.java.net/~anthony/8-52-startOnFirstThreadCheck-8005465.0/
>>>>>>>>>  2. Introducing an AWTKeepAlive thread activated in the embedded mode 
>>>>>>>>> only. This thread will send an event to the native event queue every 
>>>>>>>>> 500ms as long as there are active AWT objects present. This activity 
>>>>>>>>> will notify the embedder toolkit that the Java application as a whole 
>>>>>>>>> is still alive and needs not exit yet.
>>>>>>>> Why it wasn't necessary for awt-swt bridge?
>>>>>>> I don't know. Perhaps we should ask someone who's familiar with SWT? 
>>>>>>> Steve? How does SWT determine that AWT is dead and therefore it's OK to 
>>>>>>> terminate the native event loop and exit on the Mac?
>>>>>>> 
>>>>>>> -- 
>>>>>>> best regards,
>>>>>>> Anthony
>>>> 
>>>> -- 
>>>> Best regards, Sergey.
>>>> 

Reply via email to