Re: Window Mouse crash.

Rene Brun (Rene.Brun@cern.ch)
Mon, 01 Mar 1999 09:40:06 +0000


Hi Bill,
You do not report which version you are using. My guess is that you
use the development version 2.21/04. A protection was introduced
in 2.21/05 in TCanvas::EnterLeave in case you move the mouse in a pad
that was previously reset.
In case you use already 2.21/05 or later, please send a small macro
featuring the problem.

Rene Brun

William Love wrote:
>
> Fons
> Valery suggested you'd see where this problem is in a moment.
> I open my own canvas and plot an event (polylines and polymarkers
> and a small pad with text). If, when I have returned to the root
> prompt, I move the mouse over this canvas I get a Bus error,
> apparently because EnterLeave is called with a prevSelObj which
> is non-zero but is not a legitimate object.
>
> Bill
>
> Track #36 33 hits
> TPCtest : Real Time = 20.65 seconds Cpu Time = 9.00 seconds
> NULL
> root [1] signal BUS (invalid address alignment) in TCanvas::EnterLeave at
> line 638 in file "GPAD_Canvas.cxx"
> 638 prevSelObj->ExecuteEvent(kMouseLeave, 0, 0);
> (dbx) where
> =>[1] TCanvas::EnterLeave(this = 0x29719d8, prevSelPad = 0x8000b0,
> prevSelObj = 0x1e0011), line 638 in "GPAD_Canvas.cxx"
> [2] TCanvas::HandleInput(this = 0x29719d8, event = kMouseMotion, px = 549,
> py = 571), line 791 in "GPAD_Canvas.cxx"
> [3] TRootCanvas::HandleContainerMotion(this = 0x2971bc0, event =
> 0xefffe51c), line 947 in "GUI_RootCanvas.cxx"
> [4] TRootContainer::HandleMotion(this = 0x2975bc0, ev = 0xefffe51c), line
> 181 in "GUI_RootCanvas.cxx"
> [5] TGFrame::HandleEvent(this = 0x2975bc0, event = 0xefffe51c), line 310
> in "GUI_GFrame.cxx"
> [6] TGClient::HandleEvent(this = 0x13c2000, event = 0xefffe51c), line 826
> in "GUI_GClient.cxx"
> [7] TGClient::ProcessOneEvent(this = 0x13c2000), line 728 in
> "GUI_GClient.cxx"
> [8] TGClient::HandleInput(this = 0x13c2000), line 752 in "GUI_GClient.cxx"
> [9] TGInputHandler::Notify(this = 0x10d30b8), line 261 in
> "GUI_GClient.cxx"
> [10] TUnixSystem::DispatchOneEvent(this = 0xf7aa10, pendingOnly = '\0'),
> line 434 in "UNIX_UnixSystem.cxx"
> [11] TSystem::InnerLoop(this = 0xf7aa10), line 257 in "BASE_System.cxx"
> [12] TSystem::Run(this = 0xf7aa10), line 235 in "BASE_System.cxx"
> [13] TApplication::Run(this = 0x13c1f38, retrn = '\0'), line 609 in
> "BASE_Application.cxx"
> [14] TRint::Run(this = 0x13c1f38, retrn = '\0'), line 237 in
> "RINT_Rint.cxx"
> [15] main(argc = 1, argv = 0xefffeb6c), line 63 in "MAIN_rmain.cxx"
> (dbx) p prevSelObj
> prevSelObj = 0x1e0011
> (dbx) l
> 638 prevSelObj->ExecuteEvent(kMouseLeave, 0, 0);
> 639 }
> 640
> 641 gPad = fSelectedPad;
> 642
> 643 if (fSelected)
> 644 fSelected->ExecuteEvent(kMouseEnter, 0, 0);
> 645
> 646 gPad = padsav;
> 647 }
> (dbx) p gPad
> gPad = 0x8000b0
> (dbx) p gPad->GetName()
> dbx: fetch at 0xa0 failed -- I/O error
> dbx: cannot access address 0xa0 looking up virtual function
> (dbx) l 630,650
> 630 // selected object does not change.
> 631
> 632 if (prevSelObj == fSelected) return;
> 633
> 634 TPad *padsav = (TPad *)gPad;
> 635
> 636 if (prevSelObj) {
> 637 gPad = prevSelPad;
> 638 prevSelObj->ExecuteEvent(kMouseLeave, 0, 0);
> 639 }
> 640
> 641 gPad = fSelectedPad;
> 642
> 643 if (fSelected)
> 644 fSelected->ExecuteEvent(kMouseEnter, 0, 0);
> 645
> 646 gPad = padsav;
> 647 }
> 648
> 649
> //__________________________________________________________________________
> ____
> 650 void TCanvas::ExecuteEvent(Int_t event, Int_t px, Int_t py)
> (dbx) p padsav
> padsav = 0x29719d8
> (dbx) p padsav->GetName()
> padsav->GetName() = 0x2973aac "m_TreeD"
> (dbx) p fSelected
> fSelected = 0x29719d8
> (dbx) p fSelected->GetName()
> fSelected->GetName() = 0x2973aac "m_TreeD"
> (dbx)