aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4value_p.h
diff options
context:
space:
mode:
authorFabian Kosmale <[email protected]>2024-12-12 14:39:37 +0100
committerFabian Kosmale <[email protected]>2024-12-18 11:55:52 +0100
commita5feec81934ab0b074d6a8c7621b591851f6b544 (patch)
treeca409667609e35a3a5dec64ee2cdd14cf59f634f /src/qml/jsruntime/qv4value_p.h
parentac2d9bf0f2c32bdd6a64b8421c414a28369cbe2e (diff)
QtQml: Avoid potential gc issues
Implicitly constructing a value from a ReturnedValue muddies the responsibility for ensuring that the gc can find the object. With this change, we disable the implicit conversion. The expectation for lifetime management is now: - If a ReturnedValue is stored on the C++ stack, it must be put into a QV4::Scoped class (or there should be a comment why not doing so is safe). Passing a ReturnedValue to a function should no longer be possible, unless the function takes a ReturnedValue, in which case the expectation is that it stores the value in a place where it can be seen by the gc, before doing anything that could trigger a gc run. Using Value::fromReturnedValue can still be used to pass a Value on, but in that case, the expectation is that there is a comment which explains why this is safe. - If a QV4::Value is obtained from a function call, it ought to be stored in a ScopedValue, too. We currently can't enforce this easily, so this should be checked during code review. A possible way forward would be to disallow returning Values, but that would be a larger change, and is deferred to the future. - If a functions has a QV4::Value parameter, it's the callers' responsibilty to ensure that the gc can find it. Pick-to: 6.9 6.8 6.5 Fixes: QTBUG-131961 Change-Id: Iea055589d35a5f1ac36fe376d4389eb81de87961 Reviewed-by: Ulf Hermann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4value_p.h')
-rw-r--r--src/qml/jsruntime/qv4value_p.h3
1 files changed, 0 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h
index 9bbbf63bd0..0f9bbd3b06 100644
--- a/src/qml/jsruntime/qv4value_p.h
+++ b/src/qml/jsruntime/qv4value_p.h
@@ -38,9 +38,6 @@ struct Q_QML_EXPORT Value : public StaticValue
{
using ManagedPtr = Managed *;
- Value() = default;
- constexpr Value(quint64 val) : StaticValue(val) {}
-
static constexpr Value fromStaticValue(StaticValue staticValue)
{
return {staticValue._val};