Skip to content
Snippets Groups Projects
  1. Dec 17, 2013
  2. Dec 09, 2013
  3. Nov 25, 2013
    • Philippe Canal's avatar
      Properly detect class layout match with array and counter variable. · 7609458c
      Philippe Canal authored
      In the case of array data member (both variable size and fixed size),
      CompareContent was incorrectly reporting mismatches.
      
      In the case of a counter variable, whether it is marked as a counter
      variable or a regular variable might depends on the derived class used.
      (This is the case for TCollection where fSize is used as to hold the
      size of a variable size array only in some cases).  This results in
      different files containing a different TStreamerInfo (for TCollection)
      depending on what collections were stored in the file.  CompareContent
      was upgraded to correctly ignore the difference.
      
      This fixes ROOT-5151.
      7609458c
  4. Nov 20, 2013
  5. Nov 18, 2013
  6. Nov 14, 2013
    • Philippe Canal's avatar
      Add TBuffer::ReadVersionNoCheckSum · f5ff4a43
      Philippe Canal authored
      This (new) routine can be used from custom streamers
      when it is known that the class was always versioned
      (and thus never stored a checksum within the buffer).
      This allows to disambiguate the case where the class
      used to have a version number equal to zero and did
      not save a byte count and is now versioned.
      
      When reading the version number being zero, without
      the byte count we have no way to guess whether the
      class was version un-versioned or had previously a
      version number equal to zero.
      f5ff4a43
    • Philippe Canal's avatar
      Better support for class that used to have version==0. · d5a3d1d7
      Philippe Canal authored
      In the case where the class used to have a version number set to 0
      (i.e. don't stream any of its content) but the version number is
      now set to greater than zero, we need to avoid reading a non-existant
      checksum from the buffer.
      d5a3d1d7
  7. Nov 01, 2013
  8. Oct 31, 2013
  9. Oct 18, 2013
  10. Oct 17, 2013
    • Philippe Canal's avatar
      Fix thread safety of TGenCollectionProxy's iterator creation. · 4dc2a718
      Philippe Canal authored
      The major change is that the utility routine returned by
      TVirtualCollectionProxy::GetFunctionCreateIterators
      now has the prototype:
      
      typedef void (*CreateIterators_t)(void *collection, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy);
      
      i.e. adding a new pointer to the virtual collection proxy so
      that in the case where the routine can not hard code all
      the information (for example in the case of emulated collection
      proxy) it can now get the information from a the CollectionProxy
      without relying on the calls to PushProxy (which we are trying
      to deprecate in general as it is somewhat thread adverse).
      4dc2a718
  11. Sep 23, 2013
  12. Sep 17, 2013
  13. Sep 15, 2013
    • Philippe Canal's avatar
      Fix race condition in Prefetching when using with a TChain. · 4290bf49
      Philippe Canal authored
      Avoid race condition when moving from one TFile to another in a TChain by using a TSemaphore to mark the fact that there are still some prefetch requests in flight. By using this we ensure that the TTreeCache ( i.e. also the TFilePrefetch obj) is moved to the next file only when all in-flight requests are received. There are three things we need to take care of when moving the cache:
      - make sure the async thread is not doing any work
      - clear all blocks from prefetching and read list
      - reset the file pointer in the prefetch obj
      
      This was discovered when testing Prefeching on Alice jobs.  While using it on TChains, we discovered a race condition which was quite hard to replicate on a simple test machine and required some traffic shaping to spot it.
      
      [From Elvin]
      4290bf49
  14. Sep 13, 2013
  15. Sep 11, 2013
  16. Aug 29, 2013
  17. Aug 28, 2013
  18. Aug 23, 2013
    • Philippe Canal's avatar
      Fix fOffset calculation when encountering cached elements · d9d1e679
      Philippe Canal authored
      Update the StreamerElement search in TBranchElement::InitializeOffsets
      to always try to find a StreamerElement that points to one of the member
      of the actual class.   This allows for properly finding the offset
      of the local object within the outer object.  The previous version
      was somtimes looking at 'cached' StreamerElement; however their local
      offset are (often) different that the non-cached version and the
      main offset is very often different.   The previous code was then
      applying this offset to both the actions for the cached StreamerElement
      and for the regular StreamerElement.  For the cached element the
      two actions compensated each other.  For the regular element if
      the local object had an object within the main object, this was
      leading to the 'reading' of the local object overwriting content
      in the main object.
      
      Now the offset is calculated for the local object in regard
      to the outer object using one the StreamerElement that points to
      one of the member of the actual class *and* AddToOffset is
      not applied to the cached object (since they are never part
      of an outer object the offset is always zero).
      
      This fixes ROOT-5437
      (cherry picked from commit 4fe9faed)
      d9d1e679
    • Philippe Canal's avatar
      Add proper support for writing in the presence of io rules. · 41a999e6
      Philippe Canal authored
      In the case a read rule applies to the current StreamerInfo,
      which is used for writing, there was no good StreamerElement
      describing the location and means to write the data member
      (unless there was a repating element).
      
      Now, in this case we introduce yet another StreamerElement
      and mark it as a 'Write' element.  We also ignore it in
      the 'right' places and similarly ignore the caching and
      artificial element when writing.
      
      For example with writeTree.C in roottest/root/io/datamodelevolution/misc
      we get:
      
      StreamerInfo for class: MyClass, version=1, checksum=0x36b5f1f8
        MyClass@@1     @@alloc         offset=  0 type=1001
        TObject        BASE            offset=  0 type=66 Basic ROOT object
        TObjArray      fArray          offset= 24 type=61  (cached)
        TObjArray      fArray          offset=  0 type=61  (write)
        TObjArray      fArray          offset= 16 type=1000
        MyClass@@1     @@dealloc       offset=  0 type=1002
         i= 0, @@alloc         type=1001, offset=  0, len=1, method=0
         i= 1, TObject         type= 66, offset=  0, len=1, method=0
         i= 2, fArray          type= 61, offset= 24, len=1, method=0 [cached]
         i= 3, fArray          type= 61, offset=  0, len=1, method=0 [write]
         i= 4, fArray          type=1000, offset= 16, len=1, method=0
         i= 5, @@dealloc       type=1002, offset=  0, len=1, method=0
      (cherry picked from commit c7e58492)
      41a999e6
    • Philippe Canal's avatar
      Extent StreamerElement printing. · 2ad754a8
      Philippe Canal authored
      Add the information about whether a StreamerElement is
      designed for writing.
      Factor the collection of this information into a single
      routine TStreamerElement::GetSequenceType to centralize
      and normalize the generation of this string (instead of
      being partially duplicated in 4 places).
      (cherry picked from commit f078d990)
      2ad754a8
  19. Aug 16, 2013
  20. Jul 31, 2013
  21. Jul 30, 2013
  22. Jul 29, 2013
  23. Jul 18, 2013
Loading