Message: Re: Double delete when in MT mode Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Question Re: Double delete when in MT mode 

Forum: Multithreading
Re: None Double delete when in MT mode (Giuseppe Vacanti)
Re: Note Re: Double delete when in MT mode (Giuseppe Vacanti)
Date: 23 Dec, 2016
From: Michael H. Kelsey <Michael H. Kelsey>

On Fri, 23 Dec 2016 16:01:52 GMT, Giuseppe Vacanti wrote:
> I thought I would post an update on the problem.
> 
> I followed the advice given, cleaned up how I was holding pointers, and
> I can run the application if I do not try to write any data out. If I
> activate a stepping action I again trigger a core dump. I can post the
> few lines of code (m_runman is a const pointer to the MT RunManager):
> 
> ...UserSteppingAction(const G4Step* aStep) 
>   const G4Track * aTrack = aStep->GetTrack();
>   G4VPhysicalVolume * volume = aTrack->GetVolume();
>   const G4int event_id = m_runman->GetCurrentEvent()->GetEventID();
>   const G4int track_id = aTrack->GetTrackID();
> 
> The pointer called volume seems to be valid, but as soon as I try to
> make use of it I get a core dump.

Hmmm. Do you see anything different if you access the volume via the G4Step instead?

  G4VPhysicalVolume* volume = aStep->GetPreStepPoint()->GetPhysicalVolume();

Note that I'm using the pre-step volume here. At a boundary, the post-step volume is not where the track _is_, but where it _will_be_ at the start of the next step. Also, when a track leaves the world (status fWorldBoundary), the post-step volume is null.

> I had understood that I'm allowed to fetch geometry-related data in a
> thread, as the geometry is constant, but I'm not doing this correctly.
> Of course, with a core dump the problem could be somewhere else, and
> just manifest itself here.

It looks to me like you're accessing the geometry correctly. The volume pointers are shared across threads (and are implicitly const, therefore :-). If you run in the debugger, does the traceback show the segfault when you dereference "volume", or somewhere else? When you do the dereference, what information are you trying to get? Just the name, or something deeper into the geometry?

  -- Mike Kelsey

 Add Message Add Message
to: "Re: Double delete when in MT mode"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews