Skip to content
  • Jon Turney's avatar
    hw/xwin: Fix clipboard thread restart · 94d433c8
    Jon Turney authored
    It seems that the clipboard thread restart mechanism has been broken for a
    while, which can be demonstrated using XDMCP with KDM (e.g. to a Kubutunu 12.04
    host)
    
    KDM kills all attached clients, including the clipboard integration client,
    which restarts, but then exits on WM_QUIT.
    
    Using PostQuitMessage() in WM_DESTROY is unhelpful, as we may not actually be
    quitting the thread, if we just destroyed the window because the clipboard
    thread is about to retry, because he WM_QUIT message sticks around, and is
    noticed the next time we look at the window message queue and confuses us into
    thinking we need to quit.
    
    Sending a WM_DESTROY is apparently never correct anyhow, see [1]
    
    So:
    
    1/ Use DestroyWindow() to destroy the clipboard messaging window when cleaning
    up for retry or exit in winClipboardProc (the clipboard thread main proc)
    
    2/ Send a special WM_WM_QUIT message in winClipboardWindowDestroy() from the X
    server thread when the X server is resetting.
    
    3/ When processing that WM_WM_QUIT message in the clipboard thread, cause the
    clipboard window to PostQuitMessage(), which causes the clipboard thread to
    exit.
    
    [1] http://blogs.msdn.com/b/oldnewthing/archive/2011/09/26/10216420.aspx
    
    
    
    Signed-off-by: default avatarJon TURNEY <jon.turney@dronecode.org.uk>
    Reviewed-by: default avatarColin Harrison <colin.harrison@virgin.net>
    94d433c8