mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-16 00:00:07 +01:00
libuv create 1Hz background timeout check
Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
parent
360c0a8ee4
commit
6671327c8d
4 changed files with 22 additions and 3 deletions
|
@ -162,6 +162,8 @@ lws_create_context(struct lws_context_creation_info *info)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context->pt[n].context = context;
|
||||||
|
context->pt[n].tid = n;
|
||||||
context->pt[n].http_header_data = lws_malloc(context->max_http_header_data *
|
context->pt[n].http_header_data = lws_malloc(context->max_http_header_data *
|
||||||
context->max_http_header_pool);
|
context->max_http_header_pool);
|
||||||
if (!context->pt[n].http_header_data)
|
if (!context->pt[n].http_header_data)
|
||||||
|
|
14
lib/libuv.c
14
lib/libuv.c
|
@ -74,6 +74,17 @@ lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
lws_uv_timeout_cb(uv_timer_t *timer)
|
||||||
|
{
|
||||||
|
struct lws_context_per_thread *pt = container_of(timer,
|
||||||
|
struct lws_context_per_thread, uv_timeout_watcher);
|
||||||
|
|
||||||
|
lwsl_info("%s\n", __func__);
|
||||||
|
/* do timeout check only */
|
||||||
|
lws_service_fd_tsi(pt->context, NULL, pt->tid);
|
||||||
|
}
|
||||||
|
|
||||||
static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE };
|
static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE };
|
||||||
|
|
||||||
LWS_VISIBLE int
|
LWS_VISIBLE int
|
||||||
|
@ -112,6 +123,9 @@ lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, uv_signal_cb cb,
|
||||||
uv_poll_start(&wsi->w_read.uv_watcher, UV_READABLE, lws_accept_cb);
|
uv_poll_start(&wsi->w_read.uv_watcher, UV_READABLE, lws_accept_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uv_timer_init(pt->io_loop_uv, &pt->uv_timeout_watcher);
|
||||||
|
uv_timer_start(&pt->uv_timeout_watcher, lws_uv_timeout_cb, 1000, 1000);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,6 +530,7 @@ struct lws_context_per_thread {
|
||||||
struct lws *rx_draining_ext_list;
|
struct lws *rx_draining_ext_list;
|
||||||
struct lws *tx_draining_ext_list;
|
struct lws *tx_draining_ext_list;
|
||||||
struct lws *timeout_list;
|
struct lws *timeout_list;
|
||||||
|
struct lws_context *context;
|
||||||
void *http_header_data;
|
void *http_header_data;
|
||||||
struct allocated_headers *ah_pool;
|
struct allocated_headers *ah_pool;
|
||||||
struct lws *ah_wait_list;
|
struct lws *ah_wait_list;
|
||||||
|
@ -546,6 +547,7 @@ struct lws_context_per_thread {
|
||||||
#if defined(LWS_USE_LIBUV)
|
#if defined(LWS_USE_LIBUV)
|
||||||
uv_loop_t *io_loop_uv;
|
uv_loop_t *io_loop_uv;
|
||||||
uv_signal_t signals[8];
|
uv_signal_t signals[8];
|
||||||
|
uv_timer_t uv_timeout_watcher;
|
||||||
#endif
|
#endif
|
||||||
#if defined(LWS_USE_LIBEV)
|
#if defined(LWS_USE_LIBEV)
|
||||||
struct lws_io_watcher w_accept;
|
struct lws_io_watcher w_accept;
|
||||||
|
@ -571,6 +573,7 @@ struct lws_context_per_thread {
|
||||||
unsigned int fds_count;
|
unsigned int fds_count;
|
||||||
|
|
||||||
short ah_count_in_use;
|
short ah_count_in_use;
|
||||||
|
unsigned char tid;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -122,9 +122,8 @@ void signal_cb(uv_signal_t *watcher, int revents)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
uv_timeout_cb(uv_timer_t *w)
|
uv_timeout_cb_dumb_increment(uv_timer_t *w)
|
||||||
{
|
{
|
||||||
lwsl_info("%s\n", __func__);
|
|
||||||
lws_callback_on_writable_all_protocol(context,
|
lws_callback_on_writable_all_protocol(context,
|
||||||
&protocols[PROTOCOL_DUMB_INCREMENT]);
|
&protocols[PROTOCOL_DUMB_INCREMENT]);
|
||||||
}
|
}
|
||||||
|
@ -273,6 +272,7 @@ int main(int argc, char **argv)
|
||||||
info.gid = -1;
|
info.gid = -1;
|
||||||
info.uid = -1;
|
info.uid = -1;
|
||||||
info.max_http_header_pool = 1;
|
info.max_http_header_pool = 1;
|
||||||
|
info.timeout_secs = 5;
|
||||||
info.options = opts | LWS_SERVER_OPTION_LIBUV;
|
info.options = opts | LWS_SERVER_OPTION_LIBUV;
|
||||||
|
|
||||||
context = lws_create_context(&info);
|
context = lws_create_context(&info);
|
||||||
|
@ -284,7 +284,7 @@ int main(int argc, char **argv)
|
||||||
lws_uv_initloop(context, NULL, signal_cb, 0);
|
lws_uv_initloop(context, NULL, signal_cb, 0);
|
||||||
|
|
||||||
uv_timer_init(lws_uv_getloop(context, 0), &timeout_watcher);
|
uv_timer_init(lws_uv_getloop(context, 0), &timeout_watcher);
|
||||||
uv_timer_start(&timeout_watcher, uv_timeout_cb, 50, 50);
|
uv_timer_start(&timeout_watcher, uv_timeout_cb_dumb_increment, 50, 50);
|
||||||
|
|
||||||
lws_libuv_run(context, 0);
|
lws_libuv_run(context, 0);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue