Compare commits

..

6 commits

Author SHA1 Message Date
4d7f60092e Fix invalid use of mutex in TSLQueue
Mutex was removed in favor of the custom SharedSpinLock.
2023-12-19 16:44:30 +09:00
c798cac80b Don't fail on "try" fns if failed to get spinLock
In SharedSpinLock: Only fail on "try" fns after spinLock was acquired
and condition is not met.
2023-12-19 16:44:30 +09:00
e189628d5e Refactor shared-spin-lock to use atomic "spinLock" 2023-12-19 16:44:30 +09:00
29b8cb7ada Minor refactorings 2023-12-19 16:44:30 +09:00
c4710753d6 Reland C++11 "shared_lock" with iter remove fix
On iterator remove, the iterator will trade the read lock for a write
lock, and trade back for a read lock once the remove has been completed.
2023-12-19 16:44:30 +09:00
ad0e62f718 Fixes to .forgejo/workflows/doxygen.yaml
All checks were successful
Publish doxygen documentation to seodisparate.com / doxygen-gen-and-publish (push) Successful in 1s
2023-12-19 16:44:18 +09:00
2 changed files with 13 additions and 12 deletions

View file

@ -8,6 +8,7 @@ jobs:
doxygen-gen-and-publish:
runs-on: archLinux
steps:
- run: git clone https://git.seodisparate.com/stephenseo/UDPConnection.git UDPC
- run: git clone --depth=1 --no-single-branch https://git.seodisparate.com/stephenseo/UDPConnection.git UDPC
- run: cd UDPC && git checkout master
- run: cd UDPC && doxygen
- run: rsync -rt --delete UDPC/doxygen_out/html/ /srv/http/udpc_docs/
- run: rsync -r --delete UDPC/doxygen_out/html/ /srv/http/udpc_docs/

View file

@ -27,7 +27,7 @@ UDPC::LockObj<false> UDPC::SharedSpinLock::spin_read_lock() {
bool expected;
while (true) {
expected = false;
if(spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if(spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write) {
++read;
spinLock.store(false, std::memory_order_release);
@ -43,7 +43,7 @@ UDPC::LockObj<false> UDPC::SharedSpinLock::try_spin_read_lock() {
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write) {
++read;
spinLock.store(false, std::memory_order_release);
@ -62,7 +62,7 @@ void UDPC::SharedSpinLock::read_unlock(UDPC::Badge &&badge) {
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (read > 0) {
--read;
badge.isValid = false;
@ -78,7 +78,7 @@ UDPC::LockObj<true> UDPC::SharedSpinLock::spin_write_lock() {
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write && read == 0) {
write = true;
spinLock.store(false, std::memory_order_release);
@ -94,7 +94,7 @@ UDPC::LockObj<true> UDPC::SharedSpinLock::try_spin_write_lock() {
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write && read == 0) {
write = true;
spinLock.store(false, std::memory_order_release);
@ -113,7 +113,7 @@ void UDPC::SharedSpinLock::write_unlock(UDPC::Badge &&badge) {
bool expected;
while(true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (write) {
write = false;
badge.isValid = false;
@ -130,7 +130,7 @@ UDPC::LockObj<false> UDPC::SharedSpinLock::trade_write_for_read_lock(UDPC::LockO
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (write && read == 0) {
read = 1;
write = false;
@ -153,7 +153,7 @@ UDPC::LockObj<false> UDPC::SharedSpinLock::try_trade_write_for_read_lock(UDPC::L
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (write && read == 0) {
read = 1;
write = false;
@ -176,7 +176,7 @@ UDPC::LockObj<true> UDPC::SharedSpinLock::trade_read_for_write_lock(UDPC::LockOb
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write && read == 1) {
read = 0;
write = true;
@ -199,7 +199,7 @@ UDPC::LockObj<true> UDPC::SharedSpinLock::try_trade_read_for_write_lock(UDPC::Lo
bool expected;
while (true) {
expected = false;
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire)) {
if (spinLock.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed)) {
if (!write && read == 1) {
read = 0;
write = true;