alive ack implemented and stopping

This commit is contained in:
2026-04-11 16:27:45 +02:00
parent e9e295c3bc
commit 59c316a1f0

View File

@@ -195,7 +195,7 @@ bool runRktWebview(Handle_t *handler)
#define EVT_ALIVE_ERROR -94328 #define EVT_ALIVE_ERROR -94328
#define WAIT_ON_EVENT_MS (10 * 1000) #define WAIT_ON_EVENT_MS (10 * 1000)
#define ALIVE_MESSAGE_INTERVAL_S 5 // Should be smaller than 10 seconds #define ALIVE_MESSAGE_INTERVAL_S 5 // Should be smaller than 10 seconds
#define MAX_WAIT_RESULT (10 * 1000) // Maximum wait in milliseconds for a result #define MAX_WAIT_RESULT (2 * 1000) // Maximum wait in milliseconds for a result per time
#define MAX_ALIVE_ACK_TIME (10 * 1000) #define MAX_ALIVE_ACK_TIME (10 * 1000)
void rkt_evt_guard(void) void rkt_evt_guard(void)
@@ -275,6 +275,7 @@ void rkt_webview_cleanup()
INFO0("Getting result of quit message\n"); INFO0("Getting result of quit message\n");
if (!handler->command_result_queue->dequeue(cmd, s, MAX_WAIT_RESULT)) { if (!handler->command_result_queue->dequeue(cmd, s, MAX_WAIT_RESULT)) {
ERROR0("Other side has probably stopped working, no result on quit message\n"); ERROR0("Other side has probably stopped working, no result on quit message\n");
cmd = RESULT_QUIT;
} }
INFO1("got %d\n", cmd); INFO1("got %d\n", cmd);
if (cmd == RESULT_QUIT) { if (cmd == RESULT_QUIT) {
@@ -410,7 +411,11 @@ rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, const char
int result; int result;
std::string json_result; std::string json_result;
while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {} while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {
if (handler->alive_error) {
return result_t::failed;
}
}
return result; return result;
} }
@@ -427,7 +432,11 @@ int rkt_webview_create(rkt_wv_context_t context, rktwebview_t parent)
int result; int result;
std::string json_result; std::string json_result;
while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {} while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {
if (handler->alive_error) {
return result_t::failed;
}
}
return result; return result;
} }
@@ -454,7 +463,11 @@ void rkt_webview_close(rktwebview_t wv)
handler->command_queue->enqueue(cmd, j.dump()); \ handler->command_queue->enqueue(cmd, j.dump()); \
int result; \ int result; \
std::string json_result; \ std::string json_result; \
while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {} \ while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) { \
if (handler->alive_error) { \
return result_t::failed; \
} \
} \
result_t r = static_cast<result_t>(result); \ result_t r = static_cast<result_t>(result); \
return r; return r;
@@ -498,7 +511,15 @@ rkt_data_t *rkt_webview_call_js(rktwebview_t wv, const char *js)
int result; int result;
std::string json_result; std::string json_result;
while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {} while (!handler->command_result_queue->dequeue(result, json_result, MAX_WAIT_RESULT)) {
if (handler->alive_error) {
rkt_data_t *r = new rkt_data_t();
r->kind = rkt_data_kind_t::js_result;
r->data.js_result.result = result_t::eval_js_failed;
r->data.js_result.value = strdup("");
return r;
}
}
rkt_data_t *r = new rkt_data_t(); rkt_data_t *r = new rkt_data_t();
r->kind = rkt_data_kind_t::js_result; r->kind = rkt_data_kind_t::js_result;
@@ -729,7 +750,15 @@ rkt_data_t *rkt_webview_info()
int open_windows_result; int open_windows_result;
std::string none; std::string none;
while (!handler->command_result_queue->dequeue(open_windows_result, none, MAX_WAIT_RESULT)) {} while (!handler->command_result_queue->dequeue(open_windows_result, none, MAX_WAIT_RESULT)) {
if (handler->alive_error) {
d->data.metrics.open_windows = -1;
d->data.metrics.function_calls = -1;
d->data.metrics.log_file = strdup("");
d->data.metrics.events = -1;
return d;
}
}
d->data.metrics.open_windows = open_windows_result; d->data.metrics.open_windows = open_windows_result;
d->data.metrics.function_calls = handler->function_calls; d->data.metrics.function_calls = handler->function_calls;