Changeset 9283830 in mainline for uspace/lib/cpp/src/thread.cpp
- 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)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.