Jacek,
I am sorry to say that when commenting all references to ROOT the program
mentionned below still crashes.
I could make more comments to the original sender at this point, but I prefer to
stay polite.
Rene Brun
"Jacek M. Holeczek" wrote:
>
> Hi,
> I've just got the mail attached below.
> I think I can also confirm that up to root 3.10 there were no problems
> with ROOT + GEANT4 (and the Xm based G4UI).
> Could you, please fix these problems.
> Thanks in advance,
> Best regards,
> Jacek.
>
> ---------- Forwarded message ----------
> Date: Sun, 7 Nov 2004 10:06:21 -0800
> From: Guy Barrand <barrand@lal.in2p3.fr>
> To: PublicHyperNews@slac.stanford.edu
> Newsgroups:
> http://geant4-hn.slac.stanford.edu:5090/HyperNews/public/get/userinterface.h
> tml
> Subject: Re: ROOT + GEANT4
>
> *** Discussion title: (Graphical) User Interfaces
> Email replies to PublicHyperNews@slac.stanford.edu must include:
> In-Reply-To: <"/userinterface/15/1"@geant4-hn.slac.stanford.edu>
> Subject: ...change this to be about your reply.
>
> Hello Jacek
>
> Below there is a simple Motif program that inits Xt, creates a similar widget tree
> than the G4UIXm and before entering the XtMainLoop (that steers the X11 events) does
> an init of ROOT, creates a TH1, creates a TApplication and a TCanvas that plots the TH.
>
> With ROOT/3.10.02 this programs maps the Motif Window and the TCanvas
> (that then plots the TH1) and gives control to the Motif GUI so that someone
> can exit with the File/Exit button. And this without crash.
>
> With ROOT/4.00.08 this programs crashes in the XtMainLoop with the below
> traceback :
>
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> 0x90002038 in pthread_mutex_lock ()
> (gdb) where
> #0 0x90002038 in pthread_mutex_lock ()
> #1 0x85ef162c in XFindContext ()
> #2 0x023ca4c8 in GetDisplay ()
> #3 0x023ca6e8 in XmGetXmDisplay ()
> #4 0x023c9804 in _XmGetDragProtocolStyle ()
> #5 0x02286610 in _XmIEndUpdate ()
> #6 0x8584c120 in DoOtherSources ()
> #7 0x8584c480 in XtAppNextEvent ()
> #8 0x85840ca4 in XtAppMainLoop ()
> #9 0x00002dec in main ()
> #10 0x00002594 in _start (argc=1, argv=0xbfffeb84, envp=0xbfffeb8c) at /SourceCache/Csu/Csu-46/crt.c:267
>
> then the presence of ROOT/X11 things screws up the X11 steering of Xt !!!! Don't know
> what these guys are doing. (I would probably jump to the ceil, once more, if knowing it).
>
> Then the problem is not on Geant4 side. You can convince yourself, by commmenting
> the ROOT things, that this program (then using pure Motif/Xt) works fine. Then the problem
> is clearly around ROOT/4.00.08.
> Perhaps the way to init ROOT relative to Xt in the below program is not the right way to do.
>
> I let you play with the below program and send a bug report to the ROOT (of EVERYTHING)
> team.
>
> Note that I have tested on a Mac with g++-3.3. Here is my program :
>
> #include <X11/StringDefs.h>
>
> #include <Xm/Xm.h>
> #include <Xm/Command.h>
> #include <Xm/RowColumn.h>
> #include <Xm/Form.h>
> #include <Xm/PushB.h>
> #include <Xm/CascadeB.h>
> #include <Xm/Text.h>
>
> #include <stdlib.h>
>
> // The ROOT of EVERYTHING :
> #ifdef WIN32
> #include <Windows4Root.h>
> #endif
> #include <TROOT.h>
>
> #include <TRandom.h>
> #include <TH1.h>
> #include <TCanvas.h>
> #include <TApplication.h>
>
> static XtAppContext appContext = 0;
> static Widget menuBar = 0;
>
> /***************************************************************************/
> static void ButtonCallback(
> Widget
> ,XtPointer
> ,XtPointer
> )
> /***************************************************************************/
> /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
> {
> XtAppSetExitFlag(appContext);
> }
> /***************************************************************************/
> static Widget AddMenu(
> const char* a_name
> ,const char* a_label
> )
> /***************************************************************************/
> /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
> {
> if(menuBar==NULL) return 0;
> if(a_name==NULL) return 0;
> if(a_label==NULL) return 0;
> XtManageChild (menuBar);
> // Pulldown menu :
> Widget menu = XmCreatePulldownMenu (menuBar,(char*)a_name,NULL,0);
> // Cascade button :
> Arg args[2];
> XmString cps = XmStringLtoRCreate((char*)a_label,XmSTRING_DEFAULT_CHARSET);
> XtSetArg (args[0],XmNlabelString,cps);
> XtSetArg (args[1],XmNsubMenuId,menu);
> Widget widget = XmCreateCascadeButton (menuBar,(char*)a_name,args,2);
> XmStringFree (cps);
> XtManageChild (widget);
> return menu;
> }
> /***************************************************************************/
> static void AddButton (
> Widget a_menu
> ,const char* a_label
> ,const char* a_command
> )
> /***************************************************************************/
> /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
> {
> if(a_menu==NULL) return;
> if(a_label==NULL) return;
> if(a_command==NULL) return;
> Widget widget = XmCreatePushButton(a_menu,(char*)a_label,NULL,0);
> XtManageChild (widget);
> XtAddCallback (widget,XmNactivateCallback,ButtonCallback,(XtPointer)0);
> }
> /***************************************************************************/
> int main (
> int a_argn
> ,char* a_args[]
> )
> /***************************************************************************/
> /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
> {
> #if XtSpecificationRelease == 4
> Cardinal argn = (Cardinal)a_argn;
> #else
> int argn = a_argn;
> #endif
> Arg args[10];
> XtSetArg(args[0],XtNgeometry,XtNewString("400x400"));
> XtSetArg(args[1],XtNborderWidth,0);
> Widget top = XtAppInitialize(&appContext,"XmPushBT",
> NULL,(Cardinal)0,
> &argn,a_args,NULL,
> args,2);
>
> Widget form = XmCreateForm (top,(char*)"form",NULL,0);
> XtManageChild (form);
>
> XtSetArg(args[0],XmNtopAttachment ,XmATTACH_FORM);
> XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM);
> XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM);
> menuBar = XmCreateMenuBar (form,(char*)"menuBar",args,3);
>
> Widget menu = AddMenu("File","File");
> AddButton(menu,"Exit","Exit");
>
> XtSetArg(args[0],XmNtopAttachment ,XmATTACH_NONE);
> XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM);
> XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM);
> XtSetArg(args[3],XmNbottomAttachment ,XmATTACH_FORM);
> Widget command = XmCreateCommand (form,(char*)"command",args,4);
> XtManageChild (command);
>
> XtSetArg(args[0],XmNtopAttachment ,XmATTACH_NONE);
> XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM);
> XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM);
> XtSetArg(args[3],XmNbottomAttachment,XmATTACH_WIDGET);
> XtSetArg(args[4],XmNbottomWidget ,command);
> XmString cps = XmStringLtoRCreate((char*)"Clear",XmSTRING_DEFAULT_CHARSET);
> XtSetArg (args[5],XmNlabelString,cps);
> Widget clearButton = XmCreatePushButton(form,(char*)"clearButton",args,6);
> XmStringFree (cps);
> XtManageChild (clearButton);
>
> XtSetArg(args[0],XmNtopAttachment ,XmATTACH_WIDGET);
> XtSetArg(args[1],XmNtopWidget ,menuBar);
> XtSetArg(args[2],XmNleftAttachment ,XmATTACH_FORM);
> XtSetArg(args[3],XmNrightAttachment ,XmATTACH_FORM);
> XtSetArg(args[4],XmNbottomAttachment,XmATTACH_WIDGET);
> XtSetArg(args[5],XmNbottomWidget ,clearButton);
> XtSetArg(args[6],XmNeditMode ,XmMULTI_LINE_EDIT);
> XtSetArg(args[7],XmNrows ,12);
> XtSetArg(args[8],XmNcolumns ,80);
> Widget text = XmCreateScrolledText (form,(char*)"text",args,9);
> XtManageChild (text);
>
> /*
> XtAddCallback(clearButton,XmNactivateCallback,
> clearButtonCallback,(XtPointer)text);
> XtAddCallback(command,XmNcommandEnteredCallback,
> commandEnteredCallback,(XtPointer)this);
> */
>
> XtRealizeWidget (top);
>
> /////////////////////////////
> // begin ROOT specific part
> /////////////////////////////
> // ROOT part :
> TROOT root("Mangrove_Xm_test","Mangrove_Xm_test");
> TH1D* histogram = new TH1D("name","title",100,-5,5);
> for(int count=0;count<10000;count++)
> histogram->Fill(gRandom->Gaus(0,1));
>
> TApplication* app = new TApplication("Mangrove_Xm_test",0,0);
>
> TCanvas* canvas = new TCanvas("canvas","TH1D",10,10,800,600);
> histogram->Draw();
> canvas->Update();
>
> /////////////////////////////
> // end ROOT specific part
> /////////////////////////////
>
> XtAppMainLoop (appContext);
>
> return EXIT_SUCCESS;
> }
>
> Good luck....
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:10 MET