Add MessageQueue class

MessageQueue encapsulates a message queue built on top of a
pipe. The message queue needs a handler for receiving messages
and must be added to a worker for pumping messages through the
pipe.

Each Worker will have an instance of MessageQueue.
This commit is contained in:
Johan Wikman
2017-04-06 14:03:56 +03:00
parent d20c89be37
commit b8c78a23df
5 changed files with 427 additions and 15 deletions

View File

@ -31,25 +31,24 @@ typedef enum mxs_poll_action
MXS_POLL_ERROR = 0x10,
} mxs_poll_action_t;
struct mxs_poll_data;
/** Pointer to function that knows how to handle events for a particular
* 'struct mxs_poll_data' structure.
*
* @param data The `mxs_poll_data` instance that contained this pointer.
* @param wid The worker thread id.
* @param events The epoll events.
*
* @return A combination of mxs_poll_action_t enumeration values.
*/
typedef uint32_t (*mxs_poll_handler_t)(struct mxs_poll_data* data, int wid, uint32_t events);
typedef struct mxs_poll_data
{
/** Pointer to function that knows how to handle events for this particular
* 'struct mxs_poll_data' structure.
*
* @param data The `mxs_poll_data` instance that contained this pointer.
* @param wid The worker thread id.
* @param events The epoll events.
*
* @return A combination of mxs_poll_action_t enumeration values.
*/
uint32_t (*handler)(struct mxs_poll_data *data, int wid, uint32_t events);
mxs_poll_handler_t handler; /*< Handler for this particular kind of mxs_poll_data. */
struct
{
/**
* The id of the worker thread
*/
int id;
int id; /*< The id of the worker thread. */
} thread;
} MXS_POLL_DATA;

View File

@ -0,0 +1,36 @@
#pragma once
/*
* Copyright (c) 2016 MariaDB Corporation Ab
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file and at www.mariadb.com/bsl.
*
* Change Date: 2019-07-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2 or later of the General
* Public License.
*/
#include <maxscale/cppdefs.hh>
#include <maxscale/poll_core.h>
namespace maxscale
{
struct MxsPollData : MXS_POLL_DATA
{
MxsPollData()
{
handler = NULL;
thread.id = 0;
}
MxsPollData(mxs_poll_handler_t h)
{
handler = h;
thread.id = 0;
}
};
}