GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/ingestion/item_mem.cc
Date: 2026-09-27 02:40:09
Exec Total Coverage
Lines: 45 46 97.8%
Branches: 34 50 68.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5 #include "item_mem.h"
6
7 #include <cassert>
8 #include <cstdlib>
9
10 #include "util/concurrency.h"
11 #include "util/exception.h"
12
13 atomic_int64 ItemAllocator::total_allocated_ = 0;
14
15
16 20886533 void ItemAllocator::Free(void *ptr) {
17 20886533 const MutexLockGuard guard(lock_);
18
19 20895269 MallocArena *M = MallocArena::GetMallocArena(ptr, kArenaSize);
20
1/2
✓ Branch 1 taken 20895269 times.
✗ Branch 2 not taken.
20895269 M->Free(ptr);
21 20895269 const unsigned N = malloc_arenas_.size();
22
6/6
✓ Branch 0 taken 5490368 times.
✓ Branch 1 taken 15404901 times.
✓ Branch 3 taken 156 times.
✓ Branch 4 taken 5490212 times.
✓ Branch 5 taken 156 times.
✓ Branch 6 taken 20895113 times.
20895269 if ((N > 1) && M->IsEmpty()) {
23
1/2
✓ Branch 0 taken 312 times.
✗ Branch 1 not taken.
312 for (unsigned i = 0; i < N; ++i) {
24
2/2
✓ Branch 1 taken 156 times.
✓ Branch 2 taken 156 times.
312 if (malloc_arenas_[i] == M) {
25
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 delete malloc_arenas_[i];
26 156 atomic_xadd64(&total_allocated_, -static_cast<int>(kArenaSize));
27
1/2
✓ Branch 4 taken 156 times.
✗ Branch 5 not taken.
156 malloc_arenas_.erase(malloc_arenas_.begin() + i);
28 156 idx_last_arena_ = 0;
29 156 return;
30 }
31 }
32 ✗ PANIC(NULL);
33 }
34
2/2
✓ Branch 1 taken 20894671 times.
✓ Branch 2 taken 156 times.
20895269 }
35
36
37 2042 ItemAllocator::ItemAllocator() : idx_last_arena_(0) {
38 2042 const int retval = pthread_mutex_init(&lock_, NULL);
39
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2042 times.
2042 assert(retval == 0);
40
41
3/6
✓ Branch 1 taken 2042 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2042 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2042 times.
✗ Branch 8 not taken.
2042 malloc_arenas_.push_back(new MallocArena(kArenaSize));
42 2042 atomic_xadd64(&total_allocated_, kArenaSize);
43 2042 }
44
45
46 2041 ItemAllocator::~ItemAllocator() {
47
2/2
✓ Branch 1 taken 2041 times.
✓ Branch 2 taken 2041 times.
4082 for (unsigned i = 0; i < malloc_arenas_.size(); ++i) {
48 2041 atomic_xadd64(&total_allocated_, -static_cast<int>(kArenaSize));
49
1/2
✓ Branch 1 taken 2041 times.
✗ Branch 2 not taken.
2041 delete malloc_arenas_[i];
50 }
51 2041 pthread_mutex_destroy(&lock_);
52 2041 }
53
54
55 20861235 void *ItemAllocator::Malloc(unsigned size) {
56 20861235 const MutexLockGuard guard(lock_);
57
58
1/2
✓ Branch 2 taken 20895269 times.
✗ Branch 3 not taken.
20895269 void *p = malloc_arenas_[idx_last_arena_]->Malloc(size);
59
2/2
✓ Branch 0 taken 20894879 times.
✓ Branch 1 taken 390 times.
20895269 if (p != NULL)
60 20894879 return p;
61 390 const unsigned N = malloc_arenas_.size();
62
2/2
✓ Branch 0 taken 520 times.
✓ Branch 1 taken 156 times.
676 for (unsigned i = 0; i < N; ++i) {
63
1/2
✓ Branch 2 taken 520 times.
✗ Branch 3 not taken.
520 p = malloc_arenas_[i]->Malloc(size);
64
2/2
✓ Branch 0 taken 234 times.
✓ Branch 1 taken 286 times.
520 if (p != NULL) {
65 234 idx_last_arena_ = i;
66 234 return p;
67 }
68 }
69 156 idx_last_arena_ = N;
70
2/4
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 156 times.
✗ Branch 5 not taken.
156 MallocArena *M = new MallocArena(kArenaSize);
71 156 atomic_xadd64(&total_allocated_, kArenaSize);
72
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 malloc_arenas_.push_back(M);
73
1/2
✓ Branch 1 taken 156 times.
✗ Branch 2 not taken.
156 p = M->Malloc(size);
74
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156 times.
156 assert(p != NULL);
75 156 return p;
76 20895269 }
77