revert some changes

This commit is contained in:
mutouyun 2021-09-19 16:29:06 +08:00
parent 68590dd2f3
commit be6f16f87f
2 changed files with 26 additions and 10 deletions

View File

@ -34,7 +34,6 @@ struct waiter_helper {
counter.waiting_.fetch_add(1, std::memory_order_release); counter.waiting_.fetch_add(1, std::memory_order_release);
flags.is_waiting_.store(true, std::memory_order_relaxed); flags.is_waiting_.store(true, std::memory_order_relaxed);
auto finally = ipc::guard([&ctrl, &counter, &flags] { auto finally = ipc::guard([&ctrl, &counter, &flags] {
ctrl.get_lock(); // barrier
for (auto curr_wait = counter.waiting_.load(std::memory_order_relaxed); curr_wait > 0;) { for (auto curr_wait = counter.waiting_.load(std::memory_order_relaxed); curr_wait > 0;) {
if (counter.waiting_.compare_exchange_weak(curr_wait, curr_wait - 1, std::memory_order_acq_rel)) { if (counter.waiting_.compare_exchange_weak(curr_wait, curr_wait - 1, std::memory_order_acq_rel)) {
break; break;

View File

@ -20,6 +20,7 @@ namespace {
constexpr int LoopCount = 10000; constexpr int LoopCount = 10000;
constexpr int MultiMax = 8; constexpr int MultiMax = 8;
constexpr int TestBuffMax = 65536;
struct msg_head { struct msg_head {
int id_; int id_;
@ -28,7 +29,7 @@ struct msg_head {
class rand_buf : public buffer { class rand_buf : public buffer {
public: public:
rand_buf() { rand_buf() {
int size = capo::random<>{sizeof(msg_head), 65536}(); int size = capo::random<>{sizeof(msg_head), TestBuffMax}();
*this = buffer(new char[size], size, [](void * p, std::size_t) { *this = buffer(new char[size], size, [](void * p, std::size_t) {
delete [] static_cast<char *>(p); delete [] static_cast<char *>(p);
}); });
@ -98,6 +99,22 @@ public:
} }
} const data_set__; } const data_set__;
#define IPC_ASSERT_TRUE(condition) \
do { \
bool check = !!(condition); \
GTEST_TEST_BOOLEAN_(check, #condition, false, true, \
GTEST_NONFATAL_FAILURE_); \
if (!check) return; \
} while (0)
#define IPC_ASSERT_FALSE(condition) \
do { \
bool check = !!(condition); \
GTEST_TEST_BOOLEAN_(!check, #condition, true, false, \
GTEST_NONFATAL_FAILURE_); \
if (check) return; \
} while (0)
template <relat Rp, relat Rc, trans Ts, typename Que = chan<Rp, Rc, Ts>> template <relat Rp, relat Rc, trans Ts, typename Que = chan<Rp, Rc, Ts>>
void test_sr(char const * name, int s_cnt, int r_cnt) { void test_sr(char const * name, int s_cnt, int r_cnt) {
ipc_ut::sender().start(static_cast<std::size_t>(s_cnt)); ipc_ut::sender().start(static_cast<std::size_t>(s_cnt));
@ -109,10 +126,10 @@ void test_sr(char const * name, int s_cnt, int r_cnt) {
for (int k = 0; k < s_cnt; ++k) { for (int k = 0; k < s_cnt; ++k) {
ipc_ut::sender() << [name, &sw, r_cnt, k] { ipc_ut::sender() << [name, &sw, r_cnt, k] {
Que que { name, ipc::sender }; Que que { name, ipc::sender };
ASSERT_TRUE(que.wait_for_recv(r_cnt)); IPC_ASSERT_TRUE(que.wait_for_recv(r_cnt));
sw.start(); sw.start();
for (int i = 0; i < (int)data_set__.get().size(); ++i) { for (int i = 0; i < (int)data_set__.get().size(); ++i) {
ASSERT_TRUE(que.send(data_set__.get()[i])); IPC_ASSERT_TRUE(que.send(data_set__.get()[i]));
} }
}; };
} }
@ -122,17 +139,17 @@ void test_sr(char const * name, int s_cnt, int r_cnt) {
Que que { name, ipc::receiver }; Que que { name, ipc::receiver };
for (;;) { for (;;) {
rand_buf got { que.recv() }; rand_buf got { que.recv() };
ASSERT_FALSE(got.empty()); IPC_ASSERT_FALSE(got.empty());
int i = got.get_id(); int i = got.get_id();
if (i == -1) { if (i == -1) {
return; return;
} }
ASSERT_TRUE((i >= 0) && (i < (int)data_set__.get().size())); IPC_ASSERT_TRUE((i >= 0) && (i < (int)data_set__.get().size()));
auto const &data_set = data_set__.get()[i]; auto const &data_set = data_set__.get()[i];
if (data_set != got) { if (data_set != got) {
printf("data_set__.get()[%d] != got, size = %zd/%zd\n", printf("data_set__.get()[%d] != got, size = %zd/%zd\n",
i, data_set.size(), got.size()); i, data_set.size(), got.size());
ASSERT_TRUE(false); IPC_ASSERT_TRUE(false);
} }
} }
}; };
@ -140,7 +157,7 @@ void test_sr(char const * name, int s_cnt, int r_cnt) {
ipc_ut::sender().wait_for_done(); ipc_ut::sender().wait_for_done();
Que que { name }; Que que { name };
ASSERT_TRUE(que.wait_for_recv(r_cnt)); IPC_ASSERT_TRUE(que.wait_for_recv(r_cnt));
for (int k = 0; k < r_cnt; ++k) { for (int k = 0; k < r_cnt; ++k) {
que.send(rand_buf{msg_head{-1}}); que.send(rand_buf{msg_head{-1}});
} }