GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/quota.cc
Date: 2026-02-08 02:36:20
Exec Total Coverage
Lines: 38 39 97.4%
Branches: 20 37 54.1%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5
6 #include "quota.h"
7
8 #include <errno.h>
9 #include <unistd.h>
10
11 #include <cstdlib>
12
13 #include "util/concurrency.h"
14 #include "util/logging.h"
15 #include "util/smalloc.h"
16
17 using namespace std; // NOLINT
18
19 const uint32_t QuotaManager::kProtocolRevision = 2;
20
21 28259 void QuotaManager::BroadcastBackchannels(const string &message) {
22
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 28259 times.
28259 assert(message.length() > 0);
23 28259 const MutexLockGuard lock_guard(*lock_back_channels_);
24
25 56518 for (map<shash::Md5, int>::iterator i = back_channels_.begin(),
26 28259 iend = back_channels_.end();
27
2/2
✓ Branch 1 taken 292 times.
✓ Branch 2 taken 28259 times.
28551 i != iend;) {
28
1/2
✓ Branch 3 taken 292 times.
✗ Branch 4 not taken.
292 LogCvmfs(kLogQuota, kLogDebug, "broadcasting %s to %s", message.c_str(),
29
1/2
✓ Branch 2 taken 292 times.
✗ Branch 3 not taken.
584 i->first.ToString().c_str());
30
1/2
✓ Branch 4 taken 292 times.
✗ Branch 5 not taken.
292 int written = write(i->second, message.data(), message.length());
31
2/2
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 259 times.
292 if (written < 0)
32 33 written = 0;
33
2/2
✓ Branch 1 taken 33 times.
✓ Branch 2 taken 259 times.
292 if (static_cast<unsigned>(written) != message.length()) {
34 33 const bool remove_backchannel = errno != EAGAIN;
35
1/5
✗ Branch 2 not taken.
✓ Branch 3 taken 33 times.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
33 LogCvmfs(kLogQuota, kLogDebug | kLogSyslogWarn,
36 "failed to broadcast '%s' to %s (written %d, error %d)",
37
1/2
✓ Branch 2 taken 33 times.
✗ Branch 3 not taken.
66 message.c_str(), i->first.ToString().c_str(), written, errno);
38
1/2
✓ Branch 0 taken 33 times.
✗ Branch 1 not taken.
33 if (remove_backchannel) {
39
1/4
✓ Branch 2 taken 33 times.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
33 LogCvmfs(kLogQuota, kLogDebug | kLogSyslogWarn,
40
1/2
✓ Branch 2 taken 33 times.
✗ Branch 3 not taken.
66 "removing back channel %s", i->first.ToString().c_str());
41 33 const map<shash::Md5, int>::iterator remove_me = i;
42 33 ++i;
43
1/2
✓ Branch 2 taken 33 times.
✗ Branch 3 not taken.
33 close(remove_me->second);
44
1/2
✓ Branch 1 taken 33 times.
✗ Branch 2 not taken.
33 back_channels_.erase(remove_me);
45 } else {
46 ++i;
47 }
48 } else {
49 259 ++i;
50 }
51 }
52 28259 }
53
54
55 12584 QuotaManager::QuotaManager() : protocol_revision_(0) {
56 12584 lock_back_channels_ = reinterpret_cast<pthread_mutex_t *>(
57 12584 smalloc(sizeof(pthread_mutex_t)));
58 12584 const int retval = pthread_mutex_init(lock_back_channels_, NULL);
59
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12584 times.
12584 assert(retval == 0);
60 12584 }
61
62
63 23508 QuotaManager::~QuotaManager() {
64 47016 for (map<shash::Md5, int>::iterator i = back_channels_.begin(),
65 23508 iend = back_channels_.end();
66
2/2
✓ Branch 1 taken 33 times.
✓ Branch 2 taken 11754 times.
23574 i != iend;
67 66 ++i) {
68 66 close(i->second);
69 }
70 23508 pthread_mutex_destroy(lock_back_channels_);
71 23508 free(lock_back_channels_);
72 }
73