From 037dfe6b023482197b7fc51b1927f93186171554 Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Tue, 16 Apr 2019 22:33:33 +0200 Subject: [PATCH] removes duplicate implementation of slist (message_queue) --- lib/webfuse/adapter/impl/session.c | 15 ++--- lib/webfuse/adapter/impl/session.h | 2 +- lib/webfuse/core/message.c | 1 - lib/webfuse/core/message.h | 6 +- lib/webfuse/core/message_queue.c | 62 +++------------------ lib/webfuse/core/message_queue.h | 27 +-------- lib/webfuse/provider/impl/client_protocol.c | 17 +++--- lib/webfuse/provider/impl/client_protocol.h | 4 +- 8 files changed, 35 insertions(+), 99 deletions(-) diff --git a/lib/webfuse/adapter/impl/session.c b/lib/webfuse/adapter/impl/session.c index 7551f14..ae67cc2 100644 --- a/lib/webfuse/adapter/impl/session.c +++ b/lib/webfuse/adapter/impl/session.c @@ -24,7 +24,7 @@ static bool wf_impl_session_send( if (result) { - wf_message_queue_push(&session->queue, message); + wf_slist_append(&session->messages, &message->item); lws_callback_on_writable(session->wsi); result = true; @@ -56,7 +56,7 @@ struct wf_impl_session * wf_impl_session_create( session->authenticators = authenticators; session->server = server; wf_impl_jsonrpc_proxy_init(&session->rpc, timeout_manager, &wf_impl_session_send, session); - wf_message_queue_init(&session->queue); + wf_slist_init(&session->messages); } return session; @@ -82,7 +82,7 @@ void wf_impl_session_dispose( wf_impl_session_dispose_filesystems(&session->filesystems); wf_impl_jsonrpc_proxy_cleanup(&session->rpc); - wf_message_queue_cleanup(&session->queue); + wf_message_queue_cleanup(&session->messages); session->is_authenticated = false; session->wsi = NULL; session->authenticators = NULL; @@ -113,13 +113,14 @@ bool wf_impl_session_add_filesystem( void wf_impl_session_onwritable( struct wf_impl_session * session) { - if (!wf_message_queue_empty(&session->queue)) - { - struct wf_message * message = wf_message_queue_pop(&session->queue); + if (!wf_slist_empty(&session->messages)) + { + struct wf_slist_item * item = wf_slist_remove_first(&session->messages); + struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item); lws_write(session->wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT); wf_message_dispose(message); - if (!wf_message_queue_empty(&session->queue)) + if (!wf_slist_empty(&session->messages)) { lws_callback_on_writable(session->wsi); } diff --git a/lib/webfuse/adapter/impl/session.h b/lib/webfuse/adapter/impl/session.h index 8e37be4..cb1a19d 100644 --- a/lib/webfuse/adapter/impl/session.h +++ b/lib/webfuse/adapter/impl/session.h @@ -32,7 +32,7 @@ struct wf_impl_session char * mount_point; struct lws * wsi; bool is_authenticated; - struct wf_message_queue queue; + struct wf_slist messages; struct wf_impl_authenticators * authenticators; struct wf_impl_jsonrpc_server * server; struct wf_impl_jsonrpc_proxy rpc; diff --git a/lib/webfuse/core/message.c b/lib/webfuse/core/message.c index bc19248..e94d1c6 100644 --- a/lib/webfuse/core/message.c +++ b/lib/webfuse/core/message.c @@ -16,7 +16,6 @@ extern struct wf_message * wf_message_create(json_t const * value) { message->data = &data[sizeof(struct wf_message) + LWS_PRE]; message->length = length; - message->next = NULL; json_dumpb(value, message->data, length, JSON_COMPACT); } diff --git a/lib/webfuse/core/message.h b/lib/webfuse/core/message.h index ea73e5f..7bd346b 100644 --- a/lib/webfuse/core/message.h +++ b/lib/webfuse/core/message.h @@ -9,10 +9,11 @@ using std::size_t; #endif #include +#include "webfuse/core/slist.h" struct wf_message { - struct wf_message * next; + struct wf_slist_item item; char * data; size_t length; }; @@ -22,7 +23,8 @@ extern "C" { #endif -extern struct wf_message * wf_message_create(json_t const * value); +extern struct wf_message * wf_message_create( + json_t const * value); extern void wf_message_dispose( struct wf_message * message); diff --git a/lib/webfuse/core/message_queue.c b/lib/webfuse/core/message_queue.c index b601215..3853f44 100644 --- a/lib/webfuse/core/message_queue.c +++ b/lib/webfuse/core/message_queue.c @@ -1,63 +1,17 @@ #include "webfuse/core/message_queue.h" #include "webfuse/core/message.h" - -void wf_message_queue_init( - struct wf_message_queue * queue) -{ - queue->first = NULL; - queue->last = NULL; - -} +#include "webfuse/core/container_of.h" void wf_message_queue_cleanup( - struct wf_message_queue * queue) + struct wf_slist * queue) { - struct wf_message * message = queue->first; - while (NULL != message) + struct wf_slist_item * item = queue->first; + while (NULL != item) { - struct wf_message * next = message->next; + struct wf_slist_item * next = item->next; + struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item); wf_message_dispose(message); - message = next; + item = next; } - wf_message_queue_init(queue); -} - -bool wf_message_queue_empty( - struct wf_message_queue * queue) -{ - return (NULL == queue->first); -} - -void wf_message_queue_push( - struct wf_message_queue * queue, - struct wf_message * message) -{ - message->next = NULL; - - if (NULL != queue->last) - { - queue->last->next = message; - queue->last = message; - } - else - { - queue->first = message; - queue->last = message; - } -} - -struct wf_message * wf_message_queue_pop( - struct wf_message_queue * queue) -{ - struct wf_message * const result = queue->first; - if (NULL != result) - { - queue->first = queue->first->next; - if (NULL == queue->first) - { - queue->last = NULL; - } - } - - return result; + wf_slist_init(queue); } diff --git a/lib/webfuse/core/message_queue.h b/lib/webfuse/core/message_queue.h index 48fdfad..9d549d1 100644 --- a/lib/webfuse/core/message_queue.h +++ b/lib/webfuse/core/message_queue.h @@ -1,39 +1,16 @@ #ifndef WF_MESSAGE_QUEUE_H #define WF_MESSAGE_QUEUE_H -#ifndef __cplusplus -#include -#endif - -struct wf_message_queue; -struct wf_message; - -struct wf_message_queue -{ - struct wf_message * first; - struct wf_message * last; -}; - #ifdef __cplusplus extern "C" { #endif -extern void wf_message_queue_init( - struct wf_message_queue * queue); +struct wf_slist; extern void wf_message_queue_cleanup( - struct wf_message_queue * queue); + struct wf_slist * queue); -extern bool wf_message_queue_empty( - struct wf_message_queue * queue); - -extern void wf_message_queue_push( - struct wf_message_queue * queue, - struct wf_message * message); - -extern struct wf_message * wf_message_queue_pop( - struct wf_message_queue * queue); #ifdef __cplusplus } diff --git a/lib/webfuse/provider/impl/client_protocol.c b/lib/webfuse/provider/impl/client_protocol.c index 3176a86..a5dd360 100644 --- a/lib/webfuse/provider/impl/client_protocol.c +++ b/lib/webfuse/provider/impl/client_protocol.c @@ -10,6 +10,8 @@ #include "webfuse/provider/impl/provider.h" #include "webfuse/core/util.h" #include "webfuse/core/message.h" +#include "webfuse/core/message_queue.h" +#include "webfuse/core/container_of.h" static void wfp_impl_client_protocol_respond( json_t * response, @@ -20,7 +22,7 @@ static void wfp_impl_client_protocol_respond( struct wf_message * message = wf_message_create(response); if (NULL != message) { - wf_message_queue_push(&protocol->queue, message); + wf_slist_append(&protocol->messages, &message->item); lws_callback_on_writable(protocol->wsi); } } @@ -59,7 +61,7 @@ static void wfp_impl_client_protocol_add_filesystem( struct wf_message * message = wf_message_create(request); if (NULL != message) { - wf_message_queue_push(&protocol->queue, message); + wf_slist_append(&protocol->messages, &message->item); lws_callback_on_writable(protocol->wsi); } @@ -96,13 +98,14 @@ static int wfp_impl_client_protocol_callback( case LWS_CALLBACK_SERVER_WRITEABLE: // fall-through case LWS_CALLBACK_CLIENT_WRITEABLE: - if ((wsi == protocol->wsi) && (!wf_message_queue_empty(&protocol->queue))) + if ((wsi == protocol->wsi) && (!wf_slist_empty(&protocol->messages))) { - struct wf_message * message = wf_message_queue_pop(&protocol->queue); + struct wf_slist_item * item = wf_slist_remove_first(&protocol->messages); + struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item); lws_write(wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT); wf_message_dispose(message); - if (!wf_message_queue_empty(&protocol->queue)) + if (!wf_slist_empty(&protocol->messages)) { lws_callback_on_writable(wsi); @@ -123,7 +126,7 @@ void wfp_impl_client_protocol_init( struct wfp_provider const * provider, void * user_data) { - wf_message_queue_init(&protocol->queue); + wf_slist_init(&protocol->messages); protocol->wsi = NULL; @@ -137,7 +140,7 @@ void wfp_impl_client_protocol_init( void wfp_impl_client_protocol_cleanup( struct wfp_client_protocol * protocol) { - wf_message_queue_cleanup(&protocol->queue); + wf_message_queue_cleanup(&protocol->messages); } struct wfp_client_protocol * wfp_impl_client_protocol_create( diff --git a/lib/webfuse/provider/impl/client_protocol.h b/lib/webfuse/provider/impl/client_protocol.h index c4181fe..54929c3 100644 --- a/lib/webfuse/provider/impl/client_protocol.h +++ b/lib/webfuse/provider/impl/client_protocol.h @@ -4,7 +4,7 @@ #include "webfuse/provider/impl/provider.h" #include "webfuse/provider/impl/request.h" -#include "webfuse/core/message_queue.h" +#include "webfuse/core/slist.h" #ifdef __cplusplus extern "C" @@ -20,7 +20,7 @@ struct wfp_client_protocol struct wfp_provider provider; void * user_data; struct lws * wsi; - struct wf_message_queue queue; + struct wf_slist messages; }; extern void wfp_impl_client_protocol_init(