diff --git a/src/tests/fds.cpp b/src/tests/fds.cpp index bb22df104..9207b1751 100644 --- a/src/tests/fds.cpp +++ b/src/tests/fds.cpp @@ -7,16 +7,18 @@ #include "internal.h" #include -static std::mutex lock; -static std::condition_variable cond; +static pthread_cond_t cond; +static pthread_mutex_t lock; auto testfdcb(struct ncfdplane* ncfd, const void* buf, size_t s, void* curry) -> int { struct ncplane* n = ncfdplane_plane(ncfd); - std::lock_guard lck(lock); + pthread_mutex_lock(&lock); if(ncplane_putnstr(n, s, static_cast(buf)) <= 0){ + pthread_mutex_unlock(&lock); return -1; } notcurses_render(ncplane_notcurses(ncfdplane_plane(ncfd))); + pthread_mutex_unlock(&lock); (void)curry; (void)s; return 0; @@ -24,10 +26,10 @@ auto testfdcb(struct ncfdplane* ncfd, const void* buf, size_t s, void* curry) -> auto testfdeof(struct ncfdplane* n, int fderrno, void* curry) -> int { bool* outofline_cancelled = static_cast(curry); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); *outofline_cancelled = true; - lck.unlock(); - cond.notify_one(); + pthread_cond_signal(&cond); + pthread_mutex_unlock(&lock); (void)n; (void)fderrno; return 0; @@ -35,11 +37,11 @@ auto testfdeof(struct ncfdplane* n, int fderrno, void* curry) -> int { auto testfdeofdestroys(struct ncfdplane* n, int fderrno, void* curry) -> int { bool* inline_cancelled = static_cast(curry); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); int ret = ncfdplane_destroy(n); *inline_cancelled = true; - lck.unlock(); - cond.notify_one(); + pthread_cond_signal(&cond); + pthread_mutex_unlock(&lock); (void)fderrno; return ret; } @@ -47,6 +49,8 @@ auto testfdeofdestroys(struct ncfdplane* n, int fderrno, void* curry) -> int { // test ncfdplanes and ncsubprocs TEST_CASE("FdsAndSubprocs" * doctest::description("Fdplanes and subprocedures")) { + REQUIRE(0 == pthread_cond_init(&cond, NULL)); + REQUIRE(0 == pthread_mutex_init(&lock, NULL)); auto nc_ = testing_notcurses(); if(!nc_){ return; @@ -64,12 +68,12 @@ TEST_CASE("FdsAndSubprocs" REQUIRE(0 <= fd); auto ncfdp = ncfdplane_create(n_, &opts, fd, testfdcb, testfdeof); REQUIRE(ncfdp); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); CHECK(0 == notcurses_render(nc_)); while(!outofline_cancelled){ - cond.wait(lck); + pthread_cond_wait(&cond, &lock); } - lck.unlock(); + pthread_mutex_unlock(&lock); CHECK(0 == ncfdplane_destroy(ncfdp)); CHECK(0 == notcurses_render(nc_)); } @@ -83,12 +87,12 @@ TEST_CASE("FdsAndSubprocs" REQUIRE(0 <= fd); auto ncfdp = ncfdplane_create(n_, &opts, fd, testfdcb, testfdeofdestroys); REQUIRE(ncfdp); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); CHECK(0 == notcurses_render(nc_)); while(!inline_cancelled){ - cond.wait(lck); + pthread_cond_wait(&cond, &lock); } - lck.unlock(); + pthread_mutex_unlock(&lock); CHECK(0 == notcurses_render(nc_)); } @@ -100,10 +104,10 @@ TEST_CASE("FdsAndSubprocs" opts.curry = &outofline_cancelled; auto ncsubp = ncsubproc_createvp(n_, &opts, argv[0], argv, testfdcb, testfdeof); REQUIRE(ncsubp); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); CHECK(0 == notcurses_render(nc_)); while(!outofline_cancelled){ - cond.wait(lck); + pthread_cond_wait(&cond, &lock); } lck.unlock(); CHECK(0 != ncsubproc_destroy(ncsubp)); @@ -119,12 +123,12 @@ TEST_CASE("FdsAndSubprocs" opts.curry = &outofline_cancelled; auto ncsubp = ncsubproc_createvp(n_, &opts, argv[0], argv, testfdcb, testfdeof); REQUIRE(ncsubp); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); CHECK(0 == notcurses_render(nc_)); while(!outofline_cancelled){ - cond.wait(lck); + pthread_cond_wait(&cond, &lock); } - lck.unlock(); + pthread_mutex_unlock(&lock); CHECK(0 == ncsubproc_destroy(ncsubp)); CHECK(0 == notcurses_render(nc_)); } @@ -136,12 +140,12 @@ TEST_CASE("FdsAndSubprocs" opts.curry = &outofline_cancelled; auto ncsubp = ncsubproc_createvp(n_, &opts, argv[0], argv, testfdcb, testfdeof); REQUIRE(ncsubp); - std::unique_lock lck(lock); + pthread_mutex_lock(&lock); CHECK(0 == notcurses_render(nc_)); while(!outofline_cancelled){ - cond.wait(lck); + pthread_cond_wait(&cond, &lock); } - lck.unlock(); + pthread_mutex_unlock(&lock); CHECK(0 != ncsubproc_destroy(ncsubp)); CHECK(0 == notcurses_render(nc_)); } @@ -158,5 +162,8 @@ TEST_CASE("FdsAndSubprocs" CHECK(0 == notcurses_render(nc_)); } + CHECK(0 == pthread_cond_destroy(&cond)); + CHECK(0 == pthread_mutex_destroy(&lock)); + CHECK(0 == notcurses_stop(nc_)); }