summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--windows/winfw/src/winfw/sessioncontroller.cpp20
-rw-r--r--windows/winfw/src/winfw/sessioncontroller.h7
2 files changed, 20 insertions, 7 deletions
diff --git a/windows/winfw/src/winfw/sessioncontroller.cpp b/windows/winfw/src/winfw/sessioncontroller.cpp
index 5105a57e5d..29033db263 100644
--- a/windows/winfw/src/winfw/sessioncontroller.cpp
+++ b/windows/winfw/src/winfw/sessioncontroller.cpp
@@ -84,7 +84,7 @@ SessionController::~SessionController()
try
{
- executeTransaction([this]()
+ executeTransaction([this](SessionController &, wfp::FilterEngine &)
{
reset();
return true;
@@ -159,7 +159,7 @@ bool SessionController::addFilter(wfp::FilterBuilder &filterBuilder, const wfp::
return status;
}
-bool SessionController::executeTransaction(std::function<bool()> operation)
+bool SessionController::executeTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
@@ -175,7 +175,12 @@ bool SessionController::executeTransaction(std::function<bool()> operation)
m_transactionRecords = m_records;
- auto status = wfp::Transaction::Execute(*m_engine, operation);
+ auto transactionForwarder = [this, operation]()
+ {
+ return operation(*this, *m_engine);
+ };
+
+ auto status = wfp::Transaction::Execute(*m_engine, transactionForwarder);
if (status)
{
@@ -185,7 +190,7 @@ bool SessionController::executeTransaction(std::function<bool()> operation)
return status;
}
-bool SessionController::executeReadOnlyTransaction(std::function<bool()> operation)
+bool SessionController::executeReadOnlyTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
@@ -199,7 +204,12 @@ bool SessionController::executeReadOnlyTransaction(std::function<bool()> operati
m_activeTransaction.store(false);
};
- return wfp::Transaction::ExecuteReadOnly(*m_engine, operation);
+ auto transactionForwarder = [this, operation]()
+ {
+ return operation(*this, *m_engine);
+ };
+
+ return wfp::Transaction::ExecuteReadOnly(*m_engine, transactionForwarder);
}
uint32_t SessionController::checkpoint()
diff --git a/windows/winfw/src/winfw/sessioncontroller.h b/windows/winfw/src/winfw/sessioncontroller.h
index 690bdbbc63..d2b62afc39 100644
--- a/windows/winfw/src/winfw/sessioncontroller.h
+++ b/windows/winfw/src/winfw/sessioncontroller.h
@@ -4,6 +4,7 @@
#include "sessionrecord.h"
#include "libwfp/filterengine.h"
#include "libwfp/iidentifiable.h"
+#include <functional>
#include <atomic>
#include <memory>
#include <vector>
@@ -19,8 +20,10 @@ public:
bool addSublayer(wfp::SublayerBuilder &sublayerBuilder) override;
bool addFilter(wfp::FilterBuilder &filterBuilder, const wfp::IConditionBuilder &conditionBuilder) override;
- bool executeTransaction(std::function<bool()> operation);
- bool executeReadOnlyTransaction(std::function<bool()> operation);
+ using TransactionFunctor = std::function<bool(SessionController &, wfp::FilterEngine &)>;
+
+ bool executeTransaction(TransactionFunctor operation);
+ bool executeReadOnlyTransaction(TransactionFunctor operation);
//
// Retrieve checkpoint key that can be used to restore the current session state