WIP: Allow the adding of any fds to the poll set
This is just a first step in a trial that will allow the addition of any file descriptor to the general poll mechanism and hence allow any i/o to be handled by the worker threads. There is a structure typedef struct mxs_poll_data { void (*handler)(struct mxs_poll_data *data, int wid, uint32_t events); struct { int id; } thread; } MXS_POLL_DATA; that any other structure (e.g. a DCB) encapsulating a file descriptor must have as its first member (a C++ struct could basically derive from it). That structure contains two members; 'handler' and 'thread.id'. Handler is a pointer to a function taking a pointer to a struct mxs_poll_data, a worker thread if and an epoll event mask as argument. So, DCB is modified to have MXS_POLL_DATA as its first member and 'handler' is initialized with a function that *knows* the passed MXS_POLL_DATA can be downcast to a DCB. process_pollq no longer exists, but is now called process_pollq_dcb. The general stuff related to statistics etc. will be moved to poll_waitevents itself after which the whole function is moved to dcb.c. At that point, the handler pointer will be set in dcb_alloc(). Effectively poll.[h|c] will provide a generic mechanism for listening on whatever descriptors and the dcb stuff will be part of dcb.[h|c].
This commit is contained in:
@ -23,6 +23,7 @@
|
||||
#include <maxscale/authenticator.h>
|
||||
#include <maxscale/ssl.h>
|
||||
#include <maxscale/modinfo.h>
|
||||
#include <maxscale/poll_core.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
MXS_BEGIN_DECLS
|
||||
@ -184,6 +185,7 @@ typedef enum
|
||||
*/
|
||||
typedef struct dcb
|
||||
{
|
||||
MXS_POLL_DATA poll;
|
||||
skygw_chk_t dcb_chk_top;
|
||||
bool dcb_errhandle_called; /*< this can be called only once */
|
||||
bool dcb_is_zombie; /**< Whether the DCB is in the zombie list */
|
||||
@ -228,7 +230,6 @@ typedef struct dcb
|
||||
bool was_persistent; /**< Whether this DCB was in the persistent pool */
|
||||
struct
|
||||
{
|
||||
int id; /**< The owning thread's ID */
|
||||
struct dcb *next; /**< Next DCB in owning thread's list */
|
||||
struct dcb *tail; /**< Last DCB in owning thread's list */
|
||||
} thread;
|
||||
|
Reference in New Issue
Block a user