server : correct signal handler
This commit is contained in:
parent
d2fe216fb2
commit
1e6d002c56
1 changed files with 17 additions and 14 deletions
|
@ -1600,6 +1600,10 @@ struct server_queue {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
std::unique_lock<std::mutex> lock(mutex_tasks);
|
std::unique_lock<std::mutex> lock(mutex_tasks);
|
||||||
|
if (!running) {
|
||||||
|
QUE_DBG("%s", "terminate\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (queue_tasks.empty()) {
|
if (queue_tasks.empty()) {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
break;
|
break;
|
||||||
|
@ -1620,11 +1624,11 @@ struct server_queue {
|
||||||
QUE_DBG("%s", "waiting for new tasks\n");
|
QUE_DBG("%s", "waiting for new tasks\n");
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(mutex_tasks);
|
std::unique_lock<std::mutex> lock(mutex_tasks);
|
||||||
if (queue_tasks.empty()) {
|
|
||||||
if (!running) {
|
if (!running) {
|
||||||
QUE_DBG("%s", "terminate\n");
|
QUE_DBG("%s", "terminate\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (queue_tasks.empty()) {
|
||||||
condition_tasks.wait(lock, [&]{
|
condition_tasks.wait(lock, [&]{
|
||||||
return (!queue_tasks.empty() || !running);
|
return (!queue_tasks.empty() || !running);
|
||||||
});
|
});
|
||||||
|
@ -4425,6 +4429,7 @@ int main(int argc, char ** argv) {
|
||||||
|
|
||||||
// clean up function, to be called before exit
|
// clean up function, to be called before exit
|
||||||
auto clean_up = [&svr]() {
|
auto clean_up = [&svr]() {
|
||||||
|
SRV_INF("%s: cleaning up before exit...\n", __func__);
|
||||||
svr->stop();
|
svr->stop();
|
||||||
llama_backend_free();
|
llama_backend_free();
|
||||||
};
|
};
|
||||||
|
@ -4441,10 +4446,6 @@ int main(int argc, char ** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!was_bound) {
|
if (!was_bound) {
|
||||||
//LOG_ERROR("couldn't bind HTTP server socket", {
|
|
||||||
// {"hostname", params.hostname},
|
|
||||||
// {"port", params.port},
|
|
||||||
//});
|
|
||||||
LOG_ERR("%s: couldn't bind HTTP server socket, hostname: %s, port: %d\n", __func__, params.hostname.c_str(), params.port);
|
LOG_ERR("%s: couldn't bind HTTP server socket, hostname: %s, port: %d\n", __func__, params.hostname.c_str(), params.port);
|
||||||
clean_up();
|
clean_up();
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -4461,7 +4462,7 @@ int main(int argc, char ** argv) {
|
||||||
|
|
||||||
if (!ctx_server.load_model(params)) {
|
if (!ctx_server.load_model(params)) {
|
||||||
clean_up();
|
clean_up();
|
||||||
t.join();
|
// t.join(); // FIXME: see below
|
||||||
LOG_ERR("%s: exiting due to model loading error\n", __func__);
|
LOG_ERR("%s: exiting due to model loading error\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -4485,13 +4486,10 @@ int main(int argc, char ** argv) {
|
||||||
});
|
});
|
||||||
|
|
||||||
shutdown_handler = [&](int) {
|
shutdown_handler = [&](int) {
|
||||||
|
// this will unblock start_loop()
|
||||||
ctx_server.queue_tasks.terminate();
|
ctx_server.queue_tasks.terminate();
|
||||||
};
|
};
|
||||||
|
|
||||||
LOG_INF("%s: server is listening on http://%s:%d - starting the main loop\n", __func__, params.hostname.c_str(), params.port);
|
|
||||||
|
|
||||||
ctx_server.queue_tasks.start_loop();
|
|
||||||
|
|
||||||
#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__))
|
#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__))
|
||||||
struct sigaction sigint_action;
|
struct sigaction sigint_action;
|
||||||
sigint_action.sa_handler = signal_handler;
|
sigint_action.sa_handler = signal_handler;
|
||||||
|
@ -4506,8 +4504,13 @@ int main(int argc, char ** argv) {
|
||||||
SetConsoleCtrlHandler(reinterpret_cast<PHANDLER_ROUTINE>(console_ctrl_handler), true);
|
SetConsoleCtrlHandler(reinterpret_cast<PHANDLER_ROUTINE>(console_ctrl_handler), true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LOG_INF("%s: server is listening on http://%s:%d - starting the main loop\n", __func__, params.hostname.c_str(), params.port);
|
||||||
|
|
||||||
|
// this call blocks the main thread until queue_tasks.terminate() is called
|
||||||
|
ctx_server.queue_tasks.start_loop();
|
||||||
|
|
||||||
clean_up();
|
clean_up();
|
||||||
t.join();
|
// t.join(); // FIXME: http thread may stuck if there is an on-going request. we don't need to care about this for now as the HTTP connection will already be closed at this point, but it's better to fix this
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue