Skip to content
Snippets Groups Projects

GeoIntrusivePtr - Fix move semantics + add test

Merged Johannes Junggeburth requested to merge TestIntrusivePtrVolII into main
All threads resolved!

I observed a strange feature in Athena with respect to the reference counts of the tree top of the MuonDetectorManager.

    template <typename read_out, size_t N> void MuonDetectorManager::fillCache(std::array<std::unique_ptr<read_out>, N>& array) {
        for (std::unique_ptr<read_out>& ele : array) {
            if (!ele) continue;
            ATH_MSG_ALWAYS("Tree top "<<m_envelope[0].get()<<" "<<m_envelope[0]->refCount()
                        <<" "<<m_idHelperSvc->toString(ele->identify()));
            if (ele) ele->fillCache();
        }
    }

It's growing with the number of cache fill calls:

 Tree top 0x4affb070 2 RPC BML eta -7 phi  1 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 3 RPC BML eta -7 phi  2 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 4 RPC BML eta -7 phi  3 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 5 RPC BML eta -7 phi  4 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 6 RPC BML eta -7 phi  5 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 7 RPC BML eta -7 phi  6 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 8 RPC BML eta -7 phi  8 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 9 RPC BML eta -6 phi  1 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 10 RPC BML eta -6 phi  1 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 11 RPC BML eta -6 phi  1 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 12 RPC BML eta -6 phi  1 dbR 2 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 13 RPC BML eta -6 phi  2 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 14 RPC BML eta -6 phi  2 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 15 RPC BML eta -6 phi  2 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 16 RPC BML eta -6 phi  2 dbR 2 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 17 RPC BML eta -6 phi  3 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 18 RPC BML eta -6 phi  3 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 19 RPC BML eta -6 phi  3 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 20 RPC BML eta -6 phi  3 dbR 2 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 21 RPC BML eta -6 phi  4 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 22 RPC BML eta -6 phi  4 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 23 RPC BML eta -6 phi  4 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 24 RPC BML eta -6 phi  4 dbR 2 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 25 RPC BML eta -6 phi  5 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 26 RPC BML eta -6 phi  5 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 27 RPC BML eta -6 phi  5 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 28 RPC BML eta -6 phi  5 dbR 2 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 29 RPC BML eta -6 phi  6 dbR 1 dbZ 1 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 30 RPC BML eta -6 phi  6 dbR 1 dbZ 2 dbPhi 1 gap 1 eta channel  1
 Tree top 0x4affb070 31 RPC BML eta -6 phi  6 dbR 2 dbZ 1 dbPhi 1 gap 1 eta channel  1

For some reason, the call of child->getX() permanently increased the reference counts of the RCBase object. It's very reproducible in the standalone test and is kind of related to the move constructor of the GeoIntrusvePtr. Anyhow, the constructor and the move assignment operator are now streamlined with a move() method and the unit test of the GeoIntrusivePtr has been updated to catch this issue

Tagging: @tsulaia, @boudreau, @rbianchi

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Johannes Junggeburth resolved all threads

    resolved all threads

  • added 1 commit

    • 1c3979cb - Apply 1 suggestion(s) to 1 file(s)

    Compare with previous version

  • Johannes Junggeburth enabled an automatic merge when the pipeline for 1c3979cb succeeds

    enabled an automatic merge when the pipeline for 1c3979cb succeeds

  • mentioned in commit 462ab416

  • mentioned in merge request atlas/athena!68772 (merged)

  • Please register or sign in to reply
    Loading