> I seem to have the same effect when doing like this:
> 
> I have an application panel'ed in FvwmButtons (namely psi)
> I open the panel
> Then, minimize the application with titlebar minimize button
> Then, press the button on FvwmButtons to close panel
> 
> fvwm crashes, dumps core, and the stack trace looks the same:
> 
> == start ==
> 
> #0  0x0806a208 in HandleUnmapNotify (ea=0xbfbfe7b4) at events.c:3374
> #1  0x0806a850 in dispatch_event (e=0xbfbfe7e0) at events.c:3616
> #2  0x0806a91a in HandleEvents () at events.c:3661
> #3  0x080951f2 in main (argc=2, argv=0xbfbfec30) at fvwm.c:2524

[snip]

> (gdb) p te
> $1 = (const XEvent *) 0x14
[snip]

> So I suppose this is a bug in fvwm code for handling unmapping
> windows in general rather than exclusive firefox issue

It can be reduced to a simple formula:

  Core dump = bug

:-)

I think I've found the reason.  The FCheckIfEvent() call writes
over the te variable because the wrong pointer is passed to it
(&win instead of &args).  Can you please try the attached patch
and tell me if it fixes the problem?

Ciao

Dominik ^_^  ^_^

 --
Dominik Vogt, [EMAIL PROTECTED]
--- events.c.orig       Tue Oct  5 11:27:53 2004
+++ events.c    Tue Oct  5 11:39:47 2004
@@ -3350,17 +3350,16 @@
 
        if (weMustUnmap)
        {
-               unsigned long win = (unsigned long)te->xunmap.window;
                Bool is_map_request_pending;
                check_if_event_args args;
 
-               args.w = win;
+               args.w = te->xunmap.window;
                args.do_return_true = False;
                args.do_return_true_cr = False;
                /* Using FCheckTypedWindowEvent() does not work here.  I don't
                 * have the slightest idea why, but using FCheckIfEvent() with
                 * the appropriate predicate procedure works fine. */
-               FCheckIfEvent(dpy, &dummy, test_map_request, (char *)&win);
+               FCheckIfEvent(dpy, &dummy, test_map_request, (char *)&args);
                /* Unfortunately, there is no procedure in X that simply tests
                 * if an event of a certain type in on the queue without
                 * waiting and without removing it from the queue.

Attachment: pgpviBrUzhrRH.pgp
Description: PGP signature

Reply via email to