XWin crash after the launch of startkde on a remote Red Hat 5 machine
Michel Hummel
hummel.michel@gmail.com
Fri Aug 6 12:55:00 GMT 2010
2010/8/3 Michel Hummel <hummel.michel@gmail.com>:
> Hello,
> I'm using cygwin on Microsoft Windows XP with XWin version :
> sh-3.2# XWin.exe -version
> Welcome to the XWin X Server
> Vendor: The Cygwin/X Project
> Release: 1.8.0.0 (10800000)
> Build Date: 2010-04-02
> Contact: cygwin-xfree@cygwin.com
>
> I think I have found a bug in the XWin reset procedure which leads to
> the start of two clipboard thread's and sometime to a crash of the X
> server.
>
> The crash can be produced by lauching startkde on a Red Hat 5 remote
> machine (The crash should arrive after some minutes of work)
> but the bug can simply be produced like this :
>
> On my installation if I launch Xwin with this options :
> XWin :0 -ac&
> then I do
> xsetroot -solid '#FFFF00'
>
> After setting the color, Xwin launches its reset procedure because
> there is no more client connected ( the server loses the color but it
> is the normal comportment isn't it ?
> http://sourceware.org/ml/cygwin-xfree/2002-01/msg00106.html)
>
> The problem comes from the clipboard thread. In this example, when the
> server launches its reset procedure, the clipboard is in state
> "Launched" but is not in state "Started" (Boolean variable about
> clipboard status, see file hw/xwin/winclipboardthread.c).
>
> This particular status of the ClipboardThread during server reset is
> normaly managed by two "if" statements :
>
> * An "if" in the file hw/xwin/InitOutput.c disables the exit of the
> clipboard thread in this state
> Extract of the file hw/xwin/InitOutput.c (with line number) :
>
> 169 winClipboardShutdown (void)
> 170 {
> 171 /* Close down clipboard resources */
> 172 if (g_fClipboard && g_fClipboardLaunched && g_fClipboardStarted)
> 173 {
> 174 /* Synchronously destroy the clipboard window */
> 175 if (g_hwndClipboard != NULL)
> 176 {
> 177 SendMessage (g_hwndClipboard, WM_DESTROY, 0, 0);
> 178 /* NOTE: g_hwndClipboard is set to NULL in
> winclipboardthread.c */
> 179 }
> 180 else
> 181 return;
> 182
> 183 /* Wait for the clipboard thread to exit */
> 184 pthread_join (g_ptClipboardProc, NULL);
> 185
> 186 g_fClipboardLaunched = FALSE;
> 187 g_fClipboardStarted = FALSE;
> 188
> 189 winDebug ("winClipboardShutdown - Clipboard thread has exited.\n");
> 190 }
> 191 }
>
> * An "if" statement in the file hw/xwin/winclipboardwrappers.c
> prohibits the launch of clipboard thread if one is already Launched.
> Extract of the file hw/xwin/winclipboardwrappers.c (with line number)
> 256 /* If the clipboard client has already been started, abort */
> 257 if (g_fClipboardLaunched)
> 258 {
> 259 ErrorF ("winProcEstablishConnection - Clipboard client already "
> 260 "launched, returning.\n");
> 261 return iReturn;
> 262 }
>
>
> The problem is that the Boolean variables g_fClipboardLaunched and
> g_fClipboardStarted are re-initialized by the server reset procedure
> (function winInitializeGlobals of the file hw/xwin/winglobals.c)
> Extract of the file hw/xwin/winglobals.c (with line number)
> 128 /*
> 129 * Re-initialize global variables that are invalidated 130 * by a
> server reset.
> 131 */
> 132
> 133 void
> 134 winInitializeGlobals (void)
> 135 {
> 136 g_dwCurrentThreadID = GetCurrentThreadId ();
> 137 g_hwndKeyboardFocus = NULL;
> 138 #ifdef XWIN_CLIPBOARD
> 139 g_fClipboardLaunched = FALSE;
> 140 g_fClipboardStarted = FALSE;
> 141 g_iClipboardWindow = None;
> 142 g_pClipboardDisplay = NULL;
> 143 g_atomLastOwnedSelection = None;
> 144 g_hwndClipboard = NULL;
> 145 #endif
> 146 }
>
> The consequence of this Re-initialization in this particular situation
> is that the clipboard thread is launched two times and sometimes leads
> to a crash of the X server.
> You can see the double launch of the clipboard thread at the end of
> the attached log file Xwin.0.log ( 2 times the sentence :
> winClipboardProc - XOpenDisplay () returned and successfully opened
> the display. )
>
> To fix this bug I purpose to remove the variables g_fClipboardLaunched
> and g_fClipboardStarted of the "winInitializeGlobals (void)" function,
> as their re-initializations are handled in in the files :
> hw/xwin/InitOutput.c.
>
> That what is doing the patch Attached to this email.
>
> Regards,
> Michel Hummel
>
Hello,
I didn't saw any response to my patch proposition, did someone tried it ?
If I didn't posted it in the good place where should I have to
I will be happy to explain the problem if my first mail wasn't clear.
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ: http://x.cygwin.com/docs/faq/
More information about the Cygwin-xfree
mailing list