diff options
author | kangping <wgtdkp@google.com> | 2021-03-06 00:02:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-05 08:02:06 -0800 |
commit | 4b2f1c67ac21c6bf995d5a9e166026263de6e082 (patch) | |
tree | b2d6e79c860358d11059b3f5bb289a770a1249ab /src/dbus | |
parent | 96b74ac11d2a0027e6da65d1ac288b4df21929dc (diff) | |
download | ot-br-posix-4b2f1c67ac21c6bf995d5a9e166026263de6e082.tar.gz |
[utils] unify mainloop interface (#719)
This commit unifies that mainloop interface to always use the
MainloopContext structure rather than fd sets. We also define a
MainloopProcessor interface to ensure that each module defines exactly
the same mainloop processing methods.
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/server/dbus_agent.cpp | 27 | ||||
-rw-r--r-- | src/dbus/server/dbus_agent.hpp | 25 |
2 files changed, 18 insertions, 34 deletions
diff --git a/src/dbus/server/dbus_agent.cpp b/src/dbus/server/dbus_agent.cpp index 5526e4fd..25c17a56 100644 --- a/src/dbus/server/dbus_agent.cpp +++ b/src/dbus/server/dbus_agent.cpp @@ -84,18 +84,14 @@ void DBusAgent::RemoveDBusWatch(struct DBusWatch *aWatch, void *aContext) static_cast<DBusAgent *>(aContext)->mWatches.erase(aWatch); } -void DBusAgent::UpdateFdSet(fd_set & aReadFdSet, - fd_set & aWriteFdSet, - fd_set & aErrorFdSet, - int & aMaxFd, - struct timeval &aTimeOut) +void DBusAgent::Update(MainloopContext &aMainloop) { unsigned int flags; int fd; if (dbus_connection_get_dispatch_status(mConnection.get()) == DBUS_DISPATCH_DATA_REMAINS) { - aTimeOut = {0, 0}; + aMainloop.mTimeout = {0, 0}; } for (const auto &watch : mWatches) @@ -115,24 +111,21 @@ void DBusAgent::UpdateFdSet(fd_set & aReadFdSet, if (flags & DBUS_WATCH_READABLE) { - FD_SET(fd, &aReadFdSet); + FD_SET(fd, &aMainloop.mReadFdSet); } if ((flags & DBUS_WATCH_WRITABLE)) { - FD_SET(fd, &aWriteFdSet); + FD_SET(fd, &aMainloop.mWriteFdSet); } - FD_SET(fd, &aErrorFdSet); + FD_SET(fd, &aMainloop.mErrorFdSet); - if (fd > aMaxFd) - { - aMaxFd = fd; - } + aMainloop.mMaxFd = std::max(aMainloop.mMaxFd, fd); } } -void DBusAgent::Process(const fd_set &aReadFdSet, const fd_set &aWriteFdSet, const fd_set &aErrorFdSet) +void DBusAgent::Process(const MainloopContext &aMainloop) { unsigned int flags; int fd; @@ -152,17 +145,17 @@ void DBusAgent::Process(const fd_set &aReadFdSet, const fd_set &aWriteFdSet, con continue; } - if ((flags & DBUS_WATCH_READABLE) && !FD_ISSET(fd, &aReadFdSet)) + if ((flags & DBUS_WATCH_READABLE) && !FD_ISSET(fd, &aMainloop.mReadFdSet)) { flags &= static_cast<unsigned int>(~DBUS_WATCH_READABLE); } - if ((flags & DBUS_WATCH_WRITABLE) && !FD_ISSET(fd, &aWriteFdSet)) + if ((flags & DBUS_WATCH_WRITABLE) && !FD_ISSET(fd, &aMainloop.mWriteFdSet)) { flags &= static_cast<unsigned int>(~DBUS_WATCH_WRITABLE); } - if (FD_ISSET(fd, &aErrorFdSet)) + if (FD_ISSET(fd, &aMainloop.mErrorFdSet)) { flags |= DBUS_WATCH_ERROR; } diff --git a/src/dbus/server/dbus_agent.hpp b/src/dbus/server/dbus_agent.hpp index f75729a2..b67f2424 100644 --- a/src/dbus/server/dbus_agent.hpp +++ b/src/dbus/server/dbus_agent.hpp @@ -39,6 +39,7 @@ #include <string> #include <sys/select.h> +#include "common/mainloop.hpp" #include "dbus/common/dbus_message_helper.hpp" #include "dbus/common/dbus_resources.hpp" #include "dbus/server/dbus_object.hpp" @@ -49,7 +50,7 @@ namespace otbr { namespace DBus { -class DBusAgent +class DBusAgent : public MainloopProcessor { public: /** @@ -70,30 +71,20 @@ public: otbrError Init(void); /** - * This method performs the dbus select update. + * This method updates the mainloop context. * - * @param[out] aReadFdSet The read file descriptors. - * @param[out] aWriteFdSet The write file descriptors. - * @param[out] aErorFdSet The error file descriptors. - * @param[inout] aMaxFd The max file descriptor. - * @param[inout] aTimeOut The select timeout. + * @param[inout] aMainloop A reference to the mainloop to be updated. * */ - void UpdateFdSet(fd_set & aReadFdSet, - fd_set & aWriteFdSet, - fd_set & aErrorFdSet, - int & aMaxFd, - struct timeval &aTimeOut); + void Update(MainloopContext &aMainloop) override; /** - * This method processes the dbus I/O. + * This method processes mainloop events. * - * @param[in] aReadFdSet The read file descriptors. - * @param[in] aWriteFdSet The write file descriptors. - * @param[in] aErorFdSet The error file descriptors. + * @param[in] aMainloop A reference to the mainloop context. * */ - void Process(const fd_set &aReadFdSet, const fd_set &aWriteFdSet, const fd_set &aErrorFdSet); + void Process(const MainloopContext &aMainloop) override; private: static dbus_bool_t AddDBusWatch(struct DBusWatch *aWatch, void *aContext); |