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

randombit / botan / 5123321399

30 May 2023 04:06PM UTC coverage: 92.213% (+0.004%) from 92.209%
5123321399

Pull #3558

github

web-flow
Merge dd72f7389 into 057bcbc35
Pull Request #3558: Add braces around all if/else statements

75602 of 81986 relevant lines covered (92.21%)

11859779.3 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
   }
18
   m_state |= is_writing;
17✔
19
   while(m_state & readers_mask) {
21✔
20
      m_gate2.wait(lock);
4✔
21
   }
22
}
17✔
23

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

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

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

56
}  // namespace Botan
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