Changeset 9283830 in mainline for uspace/lib/cpp/src
- Timestamp:
- 2018-07-05T21:41:20Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7e7c1aac
- Parents:
- c4049e6
- git-author:
- Dzejrou <dzejrou@…> (2018-03-28 14:21:53)
- git-committer:
- Dzejrou <dzejrou@…> (2018-07-05 21:41:20)
- Location:
- uspace/lib/cpp/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/cpp/src/mutex.cpp
rc4049e6 r9283830 31 31 namespace std 32 32 { 33 constexpr mutex::mutex() noexcept34 : mtx_{}35 {36 fibril_mutex_initialize(&mtx_);37 }38 39 33 mutex::~mutex() 40 { 41 if (fibril_mutex_is_locked(&mtx_)) 42 { 43 /** 44 * According to the standard, this is 45 * undefined behavior, we could unlock the 46 * mutex, but that could cause issues if we 47 * are not the current owner. 48 */ 49 // fibril_mutex_unlock(&mtx_); 50 } 51 } 34 { /* DUMMY BODY */ } 52 35 53 36 void mutex::lock() 54 37 { 55 fibril_mutex_lock(&mtx_);38 aux::threading::mutex::lock(mtx_); 56 39 } 57 40 58 41 bool mutex::try_lock() 59 42 { 60 return fibril_mutex_trylock(&mtx_);43 return aux::threading::mutex::try_lock(mtx_); 61 44 } 62 45 63 46 void mutex::unlock() 64 47 { 65 fibril_mutex_unlock(&mtx_);48 aux::threading::mutex::unlock(mtx_); 66 49 } 67 50 … … 74 57 : mtx_{}, lock_level_{}, owner_{} 75 58 { 76 fibril_mutex_initialize(&mtx_);59 aux::threading::mutex::init(mtx_); 77 60 } 78 61 … … 84 67 if (owner_ != this_thread::get_id()) 85 68 { 86 fibril_mutex_lock(&mtx_);69 aux::threading::mutex::lock(mtx_); 87 70 owner_ = this_thread::get_id(); 88 71 lock_level_ = 1; … … 96 79 if (owner_ != this_thread::get_id()) 97 80 { 98 bool res = fibril_mutex_trylock(&mtx_);81 bool res = aux::threading::mutex::try_lock(mtx_); 99 82 if (res) 100 83 { … … 116 99 return; 117 100 else if (--lock_level_ == 0) 118 fibril_mutex_unlock(&mtx_);101 aux::threading::mutex::unlock(mtx_); 119 102 } 120 103 -
uspace/lib/cpp/src/thread.cpp
rc4049e6 r9283830 28 28 29 29 #include <cstdlib> 30 #include <exception> 30 31 #include <thread> 31 32 #include <utility> 33 34 #include <iostream> 32 35 33 36 namespace std … … 39 42 thread::~thread() 40 43 { 41 if (joinable())42 {43 // TODO: call std::terminate44 }44 // TODO: investigate joinable() in detail 45 // + std::terminate behaves weirdly on HelenOS 46 if (joinable() && false) 47 std::terminate(); 45 48 49 // TODO: check for finished too? 50 // TODO: WAIT! if it's not detached, then 51 // we are joinable and std::terminate was called? 52 // TODO: review this entire thing 46 53 if (joinable_wrapper_ && !joinable_wrapper_->detached()) 47 54 delete joinable_wrapper_; … … 49 56 50 57 thread::thread(thread&& other) noexcept 51 : id_{other.id_} 58 : id_{other.id_}, joinable_wrapper_{other.joinable_wrapper_} 52 59 { 53 other.id_ = fid_t{}; 60 other.id_ = aux::thread_t{}; 61 other.joinable_wrapper_ = nullptr; 54 62 } 55 63 … … 57 65 { 58 66 if (joinable()) 59 { 60 // TODO: call std::terminate 61 } 67 std::terminate(); 62 68 63 69 id_ = other.id_; 64 other.id_ = fid_t{}; 70 other.id_ = aux::thread_t{}; 71 72 joinable_wrapper_ = other.joinable_wrapper_; 73 other.joinable_wrapper_ = nullptr; 65 74 66 75 return *this; … … 70 79 { 71 80 std::swap(id_, other.id_); 81 std::swap(joinable_wrapper_, other.joinable_wrapper_); 72 82 } 73 83 74 84 bool thread::joinable() const noexcept 75 85 { 76 return id_ != fid_t{};86 return id_ != aux::thread_t{}; 77 87 } 78 88 … … 85 95 void thread::detach() 86 96 { 87 id_ = fid_t{};97 id_ = aux::thread_t{}; 88 98 89 99 if (joinable_wrapper_) … … 124 134 thread::id get_id() noexcept 125 135 { 126 return thread::id{ fibril_get_id()};136 return thread::id{aux::threading::thread::this_thread()}; 127 137 } 128 138 129 139 void yield() noexcept 130 140 { 131 fibril_yield();141 aux::threading::thread::yield(); 132 142 } 133 143 }
Note:
See TracChangeset
for help on using the changeset viewer.