• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5079590438

25 May 2023 12:28PM UTC coverage: 92.228% (+0.5%) from 91.723%
5079590438

Pull #3502

github

Pull Request #3502: Apply clang-format to the codebase

75589 of 81959 relevant lines covered (92.23%)

12139530.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.97
/src/lib/utils/thread_utils/rwlock.cpp
1
/*
2
* (C) 2019 Jack Lloyd
3
*
4
* Botan is released under the Simplified BSD License (see license.txt)
5
*/
6

7
#include <botan/internal/rwlock.h>
8

9
namespace Botan {
10

11
RWLock::RWLock() : m_state(0) {}
1✔
12

13
void RWLock::lock() {
17✔
14
   std::unique_lock<std::mutex> lock(m_mutex);
17✔
15
   while(m_state & is_writing)
30✔
16
      m_gate1.wait(lock);
13✔
17
   m_state |= is_writing;
17✔
18
   while(m_state & readers_mask)
22✔
19
      m_gate2.wait(lock);
5✔
20
}
17✔
21

22
void RWLock::unlock() {
17✔
23
   std::unique_lock<std::mutex> lock(m_mutex);
17✔
24
   m_state = 0;
17✔
25
   m_gate1.notify_all();
17✔
26
}
17✔
27

28
void RWLock::lock_shared() {
294✔
29
   std::unique_lock<std::mutex> lock(m_mutex);
294✔
30
   while((m_state & is_writing) || (m_state & readers_mask) == readers_mask)
298✔
31
      m_gate1.wait(lock);
4✔
32
   const uint32_t num_readers = (m_state & readers_mask) + 1;
294✔
33
   m_state &= ~readers_mask;
294✔
34
   m_state |= num_readers;
294✔
35
}
294✔
36

37
void RWLock::unlock_shared() {
294✔
38
   std::unique_lock<std::mutex> lock(m_mutex);
294✔
39
   const uint32_t num_readers = (m_state & readers_mask) - 1;
294✔
40
   m_state &= ~readers_mask;
294✔
41
   m_state |= num_readers;
294✔
42
   if(m_state & is_writing) {
294✔
43
      if(num_readers == 0)
5✔
44
         m_gate2.notify_one();
5✔
45
   } else {
46
      if(num_readers == readers_mask - 1)
289✔
47
         m_gate1.notify_one();
×
48
   }
49
}
294✔
50

51
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc