aboutsummaryrefslogtreecommitdiff
path: root/src/dbus
diff options
context:
space:
mode:
authorkangping <wgtdkp@google.com>2021-03-06 00:02:06 +0800
committerGitHub <noreply@github.com>2021-03-05 08:02:06 -0800
commit4b2f1c67ac21c6bf995d5a9e166026263de6e082 (patch)
treeb2d6e79c860358d11059b3f5bb289a770a1249ab /src/dbus
parent96b74ac11d2a0027e6da65d1ac288b4df21929dc (diff)
downloadot-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.cpp27
-rw-r--r--src/dbus/server/dbus_agent.hpp25
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);