Skip to content

Commit 0a75c94

Browse files
author
cai.rong
committed
server : fix coredump on std::terminate() ggml-org#12831
1 parent 5630406 commit 0a75c94

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

examples/server/server.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1763,12 +1763,16 @@ struct server_response {
17631763
std::unique_lock<std::mutex> lock(mutex_results);
17641764
condition_results.wait(lock, [&]{
17651765
if (!running) {
1766-
SRV_DBG("%s : queue result stop\n", __func__);
1767-
std::terminate(); // we cannot return here since the caller is HTTP code
1766+
return true;
17681767
}
17691768
return !queue_results.empty();
17701769
});
1771-
1770+
if (!running) {
1771+
SRV_DBG("%s : queue result stop\n", __func__);
1772+
auto res = std::make_unique<server_task_result_error>();
1773+
res->err_msg = "server stopped";
1774+
return res;
1775+
}
17721776
for (size_t i = 0; i < queue_results.size(); i++) {
17731777
if (id_tasks.find(queue_results[i]->id) != id_tasks.end()) {
17741778
server_task_result_ptr res = std::move(queue_results[i]);
@@ -1798,7 +1802,9 @@ struct server_response {
17981802
std::cv_status cr_res = condition_results.wait_for(lock, std::chrono::seconds(timeout));
17991803
if (!running) {
18001804
SRV_DBG("%s : queue result stop\n", __func__);
1801-
std::terminate(); // we cannot return here since the caller is HTTP code
1805+
auto res = std::make_unique<server_task_result_error>();
1806+
res->err_msg = "server stopped";
1807+
return res;
18021808
}
18031809
if (cr_res == std::cv_status::timeout) {
18041810
return nullptr;

0 commit comments

Comments
 (0)