Details
-
Type:
Bug
-
Status: Closed (View Workflow)
-
Priority:
Medium
-
Resolution: Fixed
-
Affects Version/s: master
-
Component/s: RDataFrame
-
Labels:None
-
Environment:
ROOT master
5.4.44-rt26-MANJARO
gcc 10.1
Description
Steps to reproduce:
1. run tfile_tree_setmaxsize.cpp to create a TTree that spans over 7 files (the program calls TTree::SetMaxTreeSize)
2. run rdfIMT_tree_setmaxsize.cpp . The program runs with IMT enabled, creates and RDF with the TTree of step 1 and calls Snapshot
output:
Fill: Switching to new file: rdfIMT_tree_setmaxsize_1.root |
Fill: Switching to new file: rdfIMT_tree_setmaxsize_2.root |
|
*** Break *** segmentation violation
|
|
...
|
|
===========================================================
|
#8 0xfffffffffffffff8 in ?? ()
|
#9 0x00005634c0a245c4 in ROOT::Internal::RDF::SnapshotHelperMT<int>::Finalize (this=0x5634c245fb70) at /home/vincenzo/Programs/rootproject/build/debugpy37/include/ROOT/RDF/ActionHelpers.hxx:1494
|
#10 0x00005634c0a22f90 in ROOT::Internal::RDF::RActionCRTP<ROOT::Internal::RDF::RAction<ROOT::Internal::RDF::SnapshotHelperMT<int>, ROOT::Detail::RDF::RLoopManager, ROOT::TypeTraits::TypeList<int> > >::Finalize (this=0x5634c245fb20) at /home/vincenzo/Programs/rootproject/build/debugpy37/include/ROOT/RDF/RAction.hxx:176
|
#11 0x00007f706e056863 in ROOT::Detail::RDF::RLoopManager::CleanUpNodes (this=0x5634c287d490) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/src/RLoopManager.cxx:503
|
#12 0x00007f706e056e81 in ROOT::Detail::RDF::RLoopManager::Run (this=0x5634c287d490) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/src/RLoopManager.cxx:573
|
#13 0x00007f706e0490ef in ROOT::RDF::RResultPtr<ROOT::RDataFrame>::TriggerRun (this=0x7fff7c311630) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/inc/ROOT/RResultPtr.hxx:307
|
#14 0x00007f706e047276 in ROOT::RDF::RResultPtr<ROOT::RDataFrame>::Get (this=0x7fff7c311630) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/inc/ROOT/RResultPtr.hxx:139
|
#15 0x00007f706e044d0a in ROOT::RDF::RResultPtr<ROOT::RDataFrame>::operator* (this=0x7fff7c311630) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/inc/ROOT/RResultPtr.hxx:179
|
#16 0x00007f706e03ca81 in ROOT::Internal::RDF::CreateSnapshotRDF (validCols=std::vector of length 1, capacity 1 = {...}, treeName=..., fileName=..., isLazy=false, loopManager=..., actionPtr=std::unique_ptr<ROOT::Internal::RDF::RActionBase> = {...}) at /home/vincenzo/Programs/rootproject/root/tree/dataframe/src/RDFInterfaceUtils.cxx:343
|
#17 0x00005634c0a14afd in ROOT::RDF::RInterface<ROOT::Detail::RDF::RLoopManager, void>::SnapshotImpl<int> (this=0x7fff7c311a70, treename=..., filename=..., columnList=std::vector of length 1, capacity 1 = {...}, options=...) at /home/vincenzo/Programs/rootproject/build/debugpy37/include/ROOT/RDF/RInterface.hxx:2422
|
#18 0x00005634c0a1343d in ROOT::RDF::RInterface<ROOT::Detail::RDF::RLoopManager, void>::Snapshot<int> (this=0x7fff7c311a70, treename=..., filename=..., columnList=std::vector of length 1, capacity 1 = {...}, options=...) at /home/vincenzo/Programs/rootproject/build/debugpy37/include/ROOT/RDF/RInterface.hxx:463
|
#19 0x00005634c0a119fc in main () at rdfIMT_tree_setmaxsize.cpp:16
|
===========================================================
|
I ran gdb on the program and in SnapshotHelperMT::Finalize the fOutputFiles member is:
(gdb) p fOutputFiles
|
std::vector of length 4, capacity 4 = {std::shared_ptr<ROOT::Experimental::TBufferMergerFile> (empty) = {get() = 0x0},
|
std::shared_ptr<ROOT::Experimental::TBufferMergerFile> (empty) = {get() = 0x0}, std::shared_ptr<ROOT::Experimental::TBufferMergerFile> (empty) = {get() = 0x0},
|
std::shared_ptr<ROOT::Experimental::TBufferMergerFile> (use count 1, weak count 1) = {get() = 0x555557308c10}}
|
But when the method tries to call file->Write() on the last element of the vector it triggers the segfault. The TBufferMergerFile itself is not accessible in this context so I'm a bit confused. Any ideas?
Cheers,
Vincenzo