diff --git a/include/maxscale/mainworker.hh b/include/maxscale/mainworker.hh new file mode 100644 index 000000000..b122e1843 --- /dev/null +++ b/include/maxscale/mainworker.hh @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018 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/bsl11. + * + * Change Date: 2022-01-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. + */ +#pragma once + +#include + +#include + +namespace maxscale +{ + +class MainWorker : public mxb::Worker +{ + MainWorker(const MainWorker&) = delete; + MainWorker& operator=(const MainWorker&) = delete; + +public: + /** + * Construct the main worker. + * + * @note There can be exactly one instance of @c MainWorker. + */ + MainWorker(); + + ~MainWorker(); + + /** + * Return the main worker. + * + * @return The main worker. + */ + static MainWorker& get(); + +private: + bool pre_run() override; + void post_run() override; + void epoll_tick() override; +}; + +} diff --git a/server/core/CMakeLists.txt b/server/core/CMakeLists.txt index fab931f5b..78e46561d 100644 --- a/server/core/CMakeLists.txt +++ b/server/core/CMakeLists.txt @@ -19,6 +19,7 @@ add_library(maxscale-common SHARED listener.cc load_utils.cc log.cc + mainworker.cc mariadb.cc maxscale_pcre2.cc misc.cc diff --git a/server/core/mainworker.cc b/server/core/mainworker.cc new file mode 100644 index 000000000..fb65240d0 --- /dev/null +++ b/server/core/mainworker.cc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018 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/bsl11. + * + * Change Date: 2022-01-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 +#include + +namespace +{ + +static struct ThisUnit +{ + maxscale::MainWorker* pThis; +} this_unit; + +} + +namespace maxscale +{ + +MainWorker::MainWorker() +{ + mxb_assert(!this_unit.pThis); + + this_unit.pThis = this; +} + +MainWorker::~MainWorker() +{ + mxb_assert(this_unit.pThis); + + this_unit.pThis = nullptr; +} + +//static +MainWorker& MainWorker::get() +{ + mxb_assert(this_unit.pThis); + + return *this_unit.pThis; +} + +bool MainWorker::pre_run() +{ + return true; +} + +void MainWorker::post_run() +{ +} + +void MainWorker::epoll_tick() +{ +} + +}