On 03/10/2011 03:35 PM, Guillaume Destuynder wrote:
>
>>
>> The problem is, that the viewer is (for windows) too busy for
>> delivering the WM_PAINT. TLS seems to be a reliable trigger, but it
>> should be possible to construct work loads for the non-TLS case too,
>> where the screen updates are stalled.
>>
>> How can it be fixed:
>>
>> 1) The situation can be improved, if in win/vncviewer/CConn.cxx the priority
>> of
>> the Windows events is raised:
>> In CConn::blockCallback():
>> // Wait for socket data, or a message to process
>> DWORD result = MsgWaitForMultipleObjects(1, &sockEvent.h, FALSE,
>> INFINITE, QS_ALLINPUT);
>> if (result == WAIT_OBJECT_0) {
>> // - Network event notification. Return control to I/O routine.
>> break;
>> } else if (result == WAIT_FAILED) {
>> // - The wait operation failed - raise an exception
>> throw rdr::SystemException("blockCallback wait error", GetLastError());
>> }
>>
>> // - There should be a message in the message queue
>> MSG msg;
>> while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
>> // IMPORTANT: We mustn't call TranslateMessage() here, because instead
>> we
>> // call ToAscii() in CKeyboard::keyEvent(). ToAscii() stores dead key
>> // state from one call to the next, which would be messed up by calls
>> to
>> // TranslateMessage() (actually it looks like TranslateMessage() calls
>> // ToAscii() internally).
>> DispatchMessage(&msg);
>> }
>> =>
>> // Wait for socket data, or a message to process
>> DWORD result = MsgWaitForMultipleObjects(1, &sockEvent.h, FALSE,
>> INFINITE, QS_ALLINPUT);
>> if (result == WAIT_FAILED) {
>> // - The wait operation failed - raise an exception
>> throw rdr::SystemException("blockCallback wait error", GetLastError());
>> }
>>
>> MSG msg;
>> while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
>> // IMPORTANT: We mustn't call TranslateMessage() here, because instead
>> we
>> // call ToAscii() in CKeyboard::keyEvent(). ToAscii() stores dead key
>> // state from one call to the next, which would be messed up by calls
>> to
>> // TranslateMessage() (actually it looks like TranslateMessage() calls
>> // ToAscii() internally).
>> DispatchMessage(&msg);
>> }
>> if (result == WAIT_OBJECT_0) {
>> // - Network event notification. Return control to I/O routine.
>> break;
>> }
After some more testing, I had to add this patch as well or in some
occasions the DesktopWindow thread would be blocked (including the
timer), waiting for the above events and messages.
--
Guillaume Destuynder - m-privacy GmbH -
Am Köllnischen Park 1, 10179 Berlin
Tel: +49 30 24342334
Fax: +49 30 24342336
Web: http://www.m-privacy.de, http://oss.m-privacy.de
Handelsregister:
Amtsgericht Charlottenburg HRB 84946
Geschäftsführer:
Dipl.-Kfm. Holger Maczkowsky,
Roman Maczkowsky
GnuPG-Key-ID: 0x3FB1D217
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Tigervnc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel