Skip to content

Commit

Permalink
fix(Datapoints): merge fix for potential deadlock from upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
obiltschnig committed Feb 5, 2024
1 parent ad10a06 commit 3c66d49
Show file tree
Hide file tree
Showing 16 changed files with 63 additions and 117 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ class IoTDatapoints_API BooleanDatapointImpl: public BasicDatapointImpl<IoT::Dev
Poco::Timestamp _updated;
bool _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ class IoTDatapoints_API CounterDatapointImpl: public BasicDatapointImpl<IoT::Dev
Poco::Timestamp _updated;
CounterType _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ class IoTDatapoints_API EnumDatapointImpl: public BasicDatapointImpl<IoT::Device
Poco::Timestamp _updated;
int _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ class IoTDatapoints_API FlagsDatapointImpl: public BasicDatapointImpl<IoT::Devic
Poco::Timestamp _updated;
FlagsType _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ class IoTDatapoints_API MovingAverageDatapointImpl: public BasicDatapointImpl<Io
double _valueChangedDelta = 0.0;
Poco::SharedPtr<IoT::Devices::EventModerationPolicy<double>> _pEventPolicy;
Poco::Util::Timer& _timer;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ class IoTDatapoints_API ScalarDatapointImpl: public BasicDatapointImpl<IoT::Devi
double _valueChangedDelta = 0.0;
Poco::SharedPtr<IoT::Devices::EventModerationPolicy<double>> _pEventPolicy;
Poco::Util::Timer& _timer;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class IoTDatapoints_API StringDatapointImpl: public BasicDatapointImpl<IoT::Devi
Poco::Timestamp _updated;
std::string _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class IoTDatapoints_API VectorDatapointImpl: public BasicDatapointImpl<IoT::Devi
Poco::Timestamp _updated;
Vector _value;
bool _valid;
mutable Poco::Mutex _mutex;
};


Expand Down
18 changes: 7 additions & 11 deletions devices/Datapoints/src/BooleanDatapointImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ BooleanDatapointImpl::~BooleanDatapointImpl()

bool BooleanDatapointImpl::value() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -64,7 +64,7 @@ bool BooleanDatapointImpl::value() const

Poco::Optional<bool> BooleanDatapointImpl::validValue() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -79,7 +79,7 @@ Poco::Optional<bool> BooleanDatapointImpl::validValue() const

bool BooleanDatapointImpl::update(bool value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -91,7 +91,7 @@ bool BooleanDatapointImpl::update(bool value)

bool BooleanDatapointImpl::invert()
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -103,32 +103,30 @@ bool BooleanDatapointImpl::invert()

bool BooleanDatapointImpl::forceUpdate(bool value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return unsafeUpdate(value);
}


void BooleanDatapointImpl::invalidate()
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

makeInvalid(_valid);
}


bool BooleanDatapointImpl::valid() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return _valid;
}


Poco::Any BooleanDatapointImpl::getDisplayValue(const std::string&) const
{
Poco::Mutex::ScopedLock lock(_mutex);

if (_access & ACCESS_READ)
{
if (_valid)
Expand Down Expand Up @@ -166,8 +164,6 @@ Poco::Any BooleanDatapointImpl::getSymbolicName(const std::string&) const

Poco::Any BooleanDatapointImpl::getUpdated(const std::string&) const
{
Poco::Mutex::ScopedLock lock(_mutex);

return _updated;
}

Expand Down
20 changes: 8 additions & 12 deletions devices/Datapoints/src/CounterDatapointImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ CounterDatapointImpl::~CounterDatapointImpl()

CounterDatapointImpl::CounterType CounterDatapointImpl::value() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -65,7 +65,7 @@ CounterDatapointImpl::CounterType CounterDatapointImpl::value() const

Poco::Optional<CounterDatapointImpl::CounterType> CounterDatapointImpl::validValue() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -80,7 +80,7 @@ Poco::Optional<CounterDatapointImpl::CounterType> CounterDatapointImpl::validVal

CounterDatapointImpl::CounterType CounterDatapointImpl::increment(CounterType delta)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -92,15 +92,15 @@ CounterDatapointImpl::CounterType CounterDatapointImpl::increment(CounterType de

CounterDatapointImpl::CounterType CounterDatapointImpl::forceIncrement(CounterType delta)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return unsafeIncrement(delta);
}


CounterDatapointImpl::CounterType CounterDatapointImpl::reset(CounterType value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -112,32 +112,30 @@ CounterDatapointImpl::CounterType CounterDatapointImpl::reset(CounterType value)

CounterDatapointImpl::CounterType CounterDatapointImpl::forceReset(CounterType value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return unsafeReset(value);
}


void CounterDatapointImpl::invalidate()
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

makeInvalid(_valid);
}


bool CounterDatapointImpl::valid() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return _valid;
}


Poco::Any CounterDatapointImpl::getDisplayValue(const std::string&) const
{
Poco::Mutex::ScopedLock lock(_mutex);

if (_access & ACCESS_READ)
{
if (_valid)
Expand Down Expand Up @@ -175,8 +173,6 @@ Poco::Any CounterDatapointImpl::getSymbolicName(const std::string&) const

Poco::Any CounterDatapointImpl::getUpdated(const std::string&) const
{
Poco::Mutex::ScopedLock lock(_mutex);

return _updated;
}

Expand Down
22 changes: 10 additions & 12 deletions devices/Datapoints/src/EnumDatapointImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ EnumDatapointImpl::~EnumDatapointImpl()

int EnumDatapointImpl::value() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -67,7 +67,7 @@ int EnumDatapointImpl::value() const

Poco::Optional<int> EnumDatapointImpl::validValue() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -88,7 +88,7 @@ std::string EnumDatapointImpl::stringValue() const

Poco::Optional<std::string> EnumDatapointImpl::validStringValue() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_READ)
{
Expand All @@ -103,7 +103,7 @@ Poco::Optional<std::string> EnumDatapointImpl::validStringValue() const

void EnumDatapointImpl::update(int value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -115,7 +115,7 @@ void EnumDatapointImpl::update(int value)

void EnumDatapointImpl::updateString(const std::string& symbolicName)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

if (_access & ACCESS_WRITE)
{
Expand All @@ -133,7 +133,7 @@ std::vector<IoT::Devices::EnumValue> EnumDatapointImpl::definedValues() const

void EnumDatapointImpl::forceUpdate(int value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

checkedUpdate(value);
}
Expand All @@ -145,7 +145,7 @@ void EnumDatapointImpl::checkedUpdate(int value)
{
if (v.value == value)
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);
unsafeUpdate(value);
return;
}
Expand All @@ -157,22 +157,22 @@ void EnumDatapointImpl::checkedUpdate(int value)
void EnumDatapointImpl::forceUpdateString(const std::string& symbolicName)
{
int value = mapSymbolicName(symbolicName);
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);
unsafeUpdate(value);
}


void EnumDatapointImpl::invalidate()
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

makeInvalid(_valid);
}


bool EnumDatapointImpl::valid() const
{
Poco::Mutex::ScopedLock lock(_mutex);
ScopedLock lock(*this);

return _valid;
}
Expand Down Expand Up @@ -210,8 +210,6 @@ Poco::Any EnumDatapointImpl::getSymbolicName(const std::string&) const

Poco::Any EnumDatapointImpl::getUpdated(const std::string&) const
{
Poco::Mutex::ScopedLock lock(_mutex);

return _updated;
}

Expand Down

0 comments on commit 3c66d49

Please sign in to comment.