Jeff Epler wrote:
> However, on this system, I couldn't recreate the problem you reported
> with either the "using _tkinter directly" instructions, or using this
> "C" test program:
> 
> #include <tcl.h>
> #include <tk.h>
> 
> int main(void) {
>     Tcl_Interp *trp;
>     unsetenv("DISPLAY");
>     trp = Tcl_CreateInterp();
>     printf("%d\n", Tk_Init(trp));
>     printf("%d\n", Tk_Init(trp));
>     return 0;
> }

The problem only occurs when Tcl and Tk were compiled with
--enable-threads, and it occurs because Tk fails to unlock a mutex
in a few error cases. The patch below fixes the problem.

I'll report it to the Tcl people, and see whether I can work around
in _tkinter.

Regards,
Martin

diff -ur tk8.4.13/generic/tkWindow.c tk8.4.13.modified/generic/tkWindow.c
--- tk8.4.13/generic/tkWindow.c 2006-04-04 23:49:57.000000000 +0200
+++ tk8.4.13.modified/generic/tkWindow.c        2006-04-30 21:41:37.000000000 
+0200
@@ -3108,6 +3108,7 @@
 
     Tcl_DStringFree(&class);
     if (code != TCL_OK) {
+       Tcl_MutexUnlock(&windowMutex);
        goto done;
     }
     Tcl_ResetResult(interp);
@@ -3124,6 +3125,7 @@
        Tcl_SetVar(interp, "geometry", geometry, TCL_GLOBAL_ONLY);
        code = Tcl_VarEval(interp, "wm geometry . ", geometry, (char *) NULL);
        if (code != TCL_OK) {
+           Tcl_MutexUnlock(&windowMutex);
            goto done;
        }
         geometry = NULL;
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to