Skip to content

Commit b76be1e

Browse files
committed
Simple-minded systematic insertion of std::lock_guard before all std::cout, std::cerr.
1 parent ead8593 commit b76be1e

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

tests/test_iostream.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,23 @@
1515
#include "pybind11_tests.h"
1616
#include <atomic>
1717
#include <iostream>
18+
#include <mutex>
1819
#include <thread>
1920

2021

22+
std::mutex couterr_mutex;
23+
24+
2125
void noisy_function(std::string msg, bool flush) {
2226

27+
const std::lock_guard<std::mutex> lock(couterr_mutex);
2328
std::cout << msg;
2429
if (flush)
2530
std::cout << std::flush;
2631
}
2732

2833
void noisy_funct_dual(std::string msg, std::string emsg) {
34+
const std::lock_guard<std::mutex> lock(couterr_mutex);
2935
std::cout << msg;
3036
std::cerr << emsg;
3137
}
@@ -37,7 +43,10 @@ struct TestThread {
3743
TestThread() : t_{nullptr}, stop_{false} {
3844
auto thread_f = [this] {
3945
while (!stop_) {
40-
std::cout << "x" << std::flush;
46+
{
47+
const std::lock_guard<std::mutex> lock(couterr_mutex);
48+
std::cout << "x" << std::flush;
49+
}
4150
std::this_thread::sleep_for(std::chrono::microseconds(50));
4251
} };
4352
t_ = new std::thread(std::move(thread_f));
@@ -72,11 +81,13 @@ TEST_SUBMODULE(iostream, m) {
7281

7382
m.def("captured_output_default", [](std::string msg) {
7483
py::scoped_ostream_redirect redir;
84+
const std::lock_guard<std::mutex> lock(couterr_mutex);
7585
std::cout << msg << std::flush;
7686
});
7787

7888
m.def("captured_output", [](std::string msg) {
7989
py::scoped_ostream_redirect redir(std::cout, py::module_::import("sys").attr("stdout"));
90+
const std::lock_guard<std::mutex> lock(couterr_mutex);
8091
std::cout << msg << std::flush;
8192
});
8293

@@ -86,6 +97,7 @@ TEST_SUBMODULE(iostream, m) {
8697

8798
m.def("captured_err", [](std::string msg) {
8899
py::scoped_ostream_redirect redir(std::cerr, py::module_::import("sys").attr("stderr"));
100+
const std::lock_guard<std::mutex> lock(couterr_mutex);
89101
std::cerr << msg << std::flush;
90102
});
91103

@@ -96,16 +108,19 @@ TEST_SUBMODULE(iostream, m) {
96108
py::arg("msg"), py::arg("emsg"));
97109

98110
m.def("raw_output", [](std::string msg) {
111+
const std::lock_guard<std::mutex> lock(couterr_mutex);
99112
std::cout << msg << std::flush;
100113
});
101114

102115
m.def("raw_err", [](std::string msg) {
116+
const std::lock_guard<std::mutex> lock(couterr_mutex);
103117
std::cerr << msg << std::flush;
104118
});
105119

106120
m.def("captured_dual", [](std::string msg, std::string emsg) {
107121
py::scoped_ostream_redirect redirout(std::cout, py::module_::import("sys").attr("stdout"));
108122
py::scoped_ostream_redirect redirerr(std::cerr, py::module_::import("sys").attr("stderr"));
123+
const std::lock_guard<std::mutex> lock(couterr_mutex);
109124
std::cout << msg << std::flush;
110125
std::cerr << emsg << std::flush;
111126
});

0 commit comments

Comments
 (0)