> 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.
pgpviBrUzhrRH.pgp
Description: PGP signature