1. Store D-Bus object path in local variable to avoid potential thread-
safety issues
2. The original code used QDBusObjectPath directly which could be
modified by other threads sharing the same systemBus connection
3. This ensures the path value remains consistent throughout the config
manager initialization process
4. Also fixed inconsistent logging macro usage (cfLog vs cfLog())
Log: Fixed potential thread-safety issue in configuration manager
initialization
Influence:
1. Test configuration manager initialization under multi-threaded
scenarios
2. Verify D-Bus communication stability when multiple threads access
systemBus
3. Ensure config manager creation works correctly in concurrent
environments
4. Test application startup and config loading in multi-process
scenarios
fix: 修复 D-Bus 配置管理器中的线程安全问题
1. 将 D-Bus 对象路径存储在局部变量中以避免潜在的线程安全问题
2. 原代码直接使用 QDBusObjectPath,可能被共享同一 systemBus 连接的其他线
程修改
3. 确保路径值在配置管理器初始化过程中保持一致
4. 同时修复了不一致的日志宏使用(cfLog vs cfLog())
Log: 修复配置管理器初始化中的潜在线程安全问题
Influence:
1. 在多线程场景下测试配置管理器初始化
2. 验证多线程访问 systemBus 时的 D-Bus 通信稳定性
3. 确保在并发环境中正确创建配置管理器
4. 测试多进程场景下的应用程序启动和配置加载
PMS: BUG-335523
Changed rmdir to rename when handling directory operations in trash
manager
The original code used rmdir to remove directories which could fail if
directory is not empty
Using rename operation instead allows moving directories to trash
location while preserving contents
This fixes potential data loss when trashing non-empty directories
fix: 将目录操作中的 rmdir 替换为 rename
在回收站管理器中处理目录操作时将 rmdir 改为 rename
原始代码使用 rmdir 删除目录,如果目录不为空则会失败
使用 rename 操作可以将目录移动到回收站位置同时保留内容
这修复了清空非空目录时可能出现的数据丢失问题
Fixed dconfig exit crash caused by static variable destruction order
1. Added null pointer check before accessing m_config in updateValue
method to prevent accessing destroyed objects
2. Added m_config.storeRelaxed(nullptr) in destructor to clear the
atomic pointer
3. Added early return checks in connect and updateValue methods when
config is null
4. Updated default value for p_rules to use proper unicode string
literal
The issue occurred because static dconfig objects were being destroyed
after the QCoreApplication instance, leading to attempts to access
already destroyed DConfig objects during cleanup. The fix ensures proper
null checking and pointer cleanup to prevent crashes during application
exit.
Log: Fixed application exit crash related to dconfig static variables
Influence:
1. Test application normal startup and shutdown
2. Verify dconfig functionality still works correctly
3. Test with multiple dconfig instances
4. Verify no crashes occur during application termination
5. Test configuration value changes and updates
fix: 修复dconfig静态变量释放导致的退出异常
修复了由静态变量销毁顺序引起的dconfig退出崩溃问题
1. 在updateValue方法中添加空指针检查,防止访问已销毁的对象
2. 在析构函数中添加m_config.storeRelaxed(nullptr)来清理原子指针
3. 在connect和updateValue方法中添加config为null时的提前返回检查
4. 更新p_rules的默认值为正确的unicode字符串字面量
问题出现在静态dconfig对象在QCoreApplication实例之后被销毁时,导致在清
理过程中尝试访问已销毁的DConfig对象。修复确保进行适当的空值检查和指针清
理,以防止应用程序退出时的崩溃。
Log: 修复了与dconfig静态变量相关的应用程序退出崩溃问题
Influence:
1. 测试应用程序正常启动和关闭
2. 验证dconfig功能仍然正常工作
3. 测试多个dconfig实例的情况
4. 验证应用程序终止时不会发生崩溃
5. 测试配置值更改和更新功能
PMS: BUG-324689
The `QString::toUtf8().constData()` returns a pointer to the internal
data of a temporary `QByteArray` object. This `QByteArray` object
is immediately destroyed after the call to `constData()`, making the
returned pointer invalid. Subsequent uses of this pointer would result
in a heap-use-after-free error.
To fix this, the `QByteArray` object returned by `toUtf8()` is now
stored in a local variable, ensuring that the data it contains remains
valid for the duration of its scope.
Influence:
1. Run all existing D-Bus related tests to ensure the fix does not
introduce regressions.
2. Specifically test the scenarios where `DSGApplication::id()` is
called before `QCoreApplication` initialization.
fix: 修复堆释放后使用问题
`QString::toUtf8().constData()` 返回一个指向临时 `QByteArray` 对象内部数
据的指针。这个 `QByteArray` 对象在调用 `constData()` 后立即被销毁,导致
返回的指针无效。随后使用此指针会导致堆释放后使用错误。
为了解决这个问题,由 `toUtf8()` 返回的 `QByteArray` 对象现在存储在一个局
部变量中,从而确保其包含的数据在其作用域内保持有效。
Influence:
1. 运行所有现有的 D-Bus 相关测试,以确保此修复不会引入回归。
2. 专门测试在 `QCoreApplication` 初始化之前调用 `DSGApplication::id()`
的场景。
The condition for checking if a file can be moved to trash was
incorrectly rejecting symlinks that point to files on the same
filesystem as the trash directory. The original condition only allowed
moving files when the storage info matched the trash storage info, but
this failed for symlinks since their storage info differs from their
target.
The fix adds an additional check to allow symlinks when they are on
the same filesystem as the trash directory, ensuring proper trash
functionality for symbolic links while maintaining the original
validation for regular files.
fix: 修复符号链接的垃圾箱验证问题
原本检查文件是否能移动到垃圾箱的条件错误地拒绝了指向与垃圾箱目录相同文
件系统的符号链接。原始条件仅当存储信息与垃圾箱存储信息匹配时才允许移动文
件,但这对于符号链接会失败,因为它们的存储信息与其目标不同。
修复添加了额外检查,允许符号链接在与垃圾箱目录相同的文件系统上时通过验
证,确保符号链接的正常垃圾箱功能,同时保持对常规文件的原始验证。
- Added else branch to handle non-QDBusArgument values with type conversion
- Improves property value handling when direct DBus unmarshalling is not applicable
Log: add fallback type conversion in demarshall function
pms: BUG-332055
Changed QSet to QStringList for annotations collection to ensure
deterministic output order
Added removeDuplicates() call to maintain uniqueness while preserving
order
This fixes non-reproducible builds caused by QSet's unpredictable
iteration order
Log: Fixed DBUS code generation reproducibility issue
Influence:
1. Verify DBUS interface code generation produces identical output for
same inputs
2. Test with multiple interface definitions containing annotations
3. Check build reproducibility across different systems
fix: 修复DBUS代码生成不可重复的问题
将注解集合从QSet改为QStringList以确保输出顺序确定性
添加removeDuplicates()调用在保持顺序的同时确保唯一性
修复了由于QSet迭代顺序不可预测导致的构建不可重复问题
Log: 修复了DBUS代码生成不可重复的问题
Influence:
1. 验证相同输入下DBUS接口代码生成是否产生相同输出
2. 测试包含多个注解的接口定义
3. 检查不同系统间的构建可重复性
Added D_IGNORE_DEPRECATIONS macro to suppress deprecation warnings in
DTK core
1. Define D_IGNORE_DEPRECATIONS for static library builds
2. Define D_IGNORE_DEPRECATIONS when building DTK core library
3. Added conditional compilation to skip deprecation attributes when
D_IGNORE_DEPRECATIONS is defined
4. Maintains backward compatibility while allowing projects to ignore
deprecated APIs
This change helps projects transition away from deprecated APIs without
immediate warning noise while maintaining the deprecation markers for
new development
Influence:
1. Test building with D_IGNORE_DEPRECATIONS defined to verify
deprecation warnings are suppressed
2. Test building without D_IGNORE_DEPRECATIONS to ensure deprecation
warnings still appear
3. Verify both static and dynamic library builds work correctly with
this change
feat: 添加DTK废弃接口忽略支持
新增D_IGNORE_DEPRECATIONS宏用于抑制DTK核心中的废弃警告
1. 为静态库构建定义D_IGNORE_DEPRECATIONS
2. 构建DTK核心库时定义D_IGNORE_DEPRECATIONS
3. 添加条件编译,当D_IGNORE_DEPRECATIONS定义时跳过废弃属性
4. 保持向后兼容性同时允许项目忽略废弃API
此变更帮助项目在不立即处理废弃警告的情况下逐步迁移废弃API,同时保留废弃
标记供新开发使用
Influence:
1. 测试定义D_IGNORE_DEPRECATIONS时的构建,验证废弃警告被抑制
2. 测试未定义D_IGNORE_DEPRECATIONS时的构建,确保废弃警告仍然显示
3. 验证静态库和动态库构建在此变更后都能正常工作
1. Replaced QScopedPointer with std::unique_ptr for better memory
management and consistency
2. Fixed time handling in DRecentManager for Qt6 by using QTimeZone
3. Added missing memory header for smart pointers
These changes address compiler warnings and ensure proper functionality
across both Qt5 and Qt6 versions, while modernizing the codebase with
standard C++ features.
fix: 修复编译警告和Qt6兼容性问题
1. 使用std::unique_ptr替代QScopedPointer以获得更好的内存管理和一致性
2. 在DRecentManager中修复Qt6的时间处理问题,使用QTimeZone
3. 添加缺失的memory头文件以支持智能指针
这些修改解决了编译器警告问题,并确保代码在Qt5和Qt6版本中都能正常工作,同
时使用标准C++特性使代码更现代化。
1. Added custom deleters for D-Bus resources (DBusError, DBusConnection,
DBusMessage)
2. Replaced manual resource cleanup with std::unique_ptr RAII wrappers
3. Simplified error handling by removing repetitive cleanup code
4. Improved memory safety by ensuring resources are always released
5. Added detailed documentation for getId() function explaining the
libdbus-1 usage
The changes ensure proper resource management even in error cases and
make the code more maintainable by eliminating manual cleanup. This is
particularly important for D-Bus operations that may fail at multiple
points. The RAII approach prevents resource leaks and makes the code
more robust.
refactor: 使用 RAII 改进 D-Bus 资源管理
1. 为 D-Bus 资源(DBusError, DBusConnection, DBusMessage)添加自定义删除器
2. 使用 std::unique_ptr RAII 包装器替代手动资源清理
3. 通过移除重复的清理代码简化错误处理
4. 通过确保资源总是被释放来提高内存安全性
5. 为 getId() 函数添加详细文档说明 libdbus-1 的使用
这些变更确保了即使在错误情况下也能正确处理资源,并通过消除手动清理使代码
更易于维护。这对于可能在多个点失败的 D-Bus 操作尤为重要。RAII 方法防止了
资源泄漏并使代码更加健壮。
Changed from using qApp->applicationName() to
QCoreApplication::applicationName() for getting the application name.
This provides better consistency and reliability as QCoreApplication is
the base class and ensures the method is always available, while qApp
macro might not be defined in all contexts. The change maintains the
same functionality but with more robust implementation.
fix: 使用 QCoreApplication 获取应用名称
将 qApp->applicationName() 改为 QCoreApplication::applicationName() 来获
取应用名称。这提供了更好的一致性和可靠性,因为 QCoreApplication 是基类并
确保方法始终可用,而 qApp 宏在某些上下文中可能未定义。此更改保持了相同的
功能但实现了更健壮的实现。
The changes replace QtDBus implementation with direct libdbus-1 calls
in dsgapplication.cpp for better control and performance. Key changes
include:
1. Added libdbus-1-dev as build dependency in debian/control
2. Updated CMakeLists.txt to find and link against libdbus-1
3. Implemented new utility functions checkDBusServiceActivatable and
callDBusIdentifyMethod using libdbus-1 API
4. Removed QtDBus dependencies and replaced with direct D-Bus calls
5. Added proper error handling and resource cleanup for D-Bus
connections
This change provides more direct control over D-Bus interactions
and removes QtDBus dependency overhead while maintaining the same
functionality.
refactor: 在 dsgapplication 中用 libdbus-1 替换 QtDBus
这些更改用直接的 libdbus-1 调用替换了 dsgapplication.cpp 中的 QtDBus 实
现,以获得更好的控制和性能。主要变更包括:
1. 在 debian/control 中添加了 libdbus-1-dev 作为构建依赖
2. 更新 CMakeLists.txt 以查找并链接 libdbus-1
3. 使用 libdbus-1 API 实现了新的实用函数 checkDBusServiceActivatable 和
callDBusIdentifyMethod
4. 移除了 QtDBus 依赖项并替换为直接的 D-Bus 调用
5. 为 D-Bus 连接添加了适当的错误处理和资源清理
此变更提供了对 D-Bus 交互更直接的控制,在保持相同功能的同时移除了 QtDBus
依赖开销。
1. Changed version parameter from required to optional in auto-
release.yml
2. Fixed spec file formatting for Version and Release fields
3. Added %{?dist} macro to Release field for better RPM compatibility
The changes make the release workflow more flexible by allowing version-
less releases when needed. The spec file formatting improvements ensure
consistency with RPM packaging standards, while the %{?dist} macro helps
with proper package distribution tagging.
fix: 在发布工作流中使版本参数可选
1. 在 auto-release.yml 中将版本参数从必填改为可选
2. 修复了 spec 文件中 Version 和 Release 字段的格式
3. 在 Release 字段中添加了 %{?dist} 宏以提升 RPM 兼容性
这些改动使得发布工作流在需要时可以更灵活地进行无版本发布。spec 文件的格
式改进确保了与 RPM 打包标准的一致性,而 %{?dist} 宏有助于正确的软件包分
发标记。
1. Added missing copy of cachePrefix member when copying DConfigFile
objects
2. The cachePrefix was being lost during copy operations which could
lead to incorrect cache behavior
3. This ensures complete and proper copying of all cache-related data
fix: 在 DConfigFile 拷贝构造函数中复制 cachePrefix
1. 添加了对 cachePrefix 成员的拷贝操作,在复制 DConfigFile 对象时该成员
之前被遗漏
2. 之前拷贝操作会丢失 cachePrefix,可能导致缓存行为异常
3. 此修改确保所有缓存相关数据都能被完整正确地拷贝
1. Modified condition to check for both DTK_DISABLED_LOGGING_RULES and
QT_LOGGING_RULES environment variables
2. This change prevents logging rules from being initialized when either
variable is set
3. Ensures better compatibility with Qt's standard logging configuration
system
4. Maintains backward compatibility while adding support for standard Qt
logging control
fix: 改进日志规则环境变量处理
1. 修改条件以同时检查 DTK_DISABLED_LOGGING_RULES 和 QT_LOGGING_RULES 环
境变量
2. 当任一变量设置时,阻止日志规则初始化
3. 确保与 Qt 标准日志配置系统更好的兼容性
4. 在添加对标准 Qt 日志控制支持的同时保持向后兼容
Use VERSION file to manage DTK version. VERSION file defines package
version. It also decides the initial value of cached variable
DTK_VERSION which controls the project version in cmake build system.
VERSION file is not synchronized to DTK6, as DTK6 has its own VERSION
file. One can still pass version to DTK_VERSION when running cmake
configure. This is helpful for developers.
Signed-off-by: Yixue Wang <wangyixue@deepin.org>
Added case 9 to return UosMilitary/UosMilitaryS in uosEditionType
function
The change was necessary because the system needs to recognize edition
type 9 as a valid military edition variant
This ensures proper handling of all supported UOS edition types in the
system
fix: 添加缺失的 UosMilitary 版本类型处理
在 uosEditionType 函数中添加了 case 9 返回 UosMilitary/UosMilitaryS 的
处理
此变更是必要的,因为系统需要将类型9识别为有效的军事版本变体
这确保了系统中对所有支持的 UOS 版本类型的正确处理
pms: BUG-316837
1. Fixed incorrect bitwise AND operation in property status tracking
2. Changed `fetchAndAndOrdered(1 << index)` to `fetchAndAndOrdered(~(1
<< index))`
3. This ensures proper bit clearing when unsetting property flags
4. The change was made in both the generated header and the generator
tool
5. Without this fix, status tracking would incorrectly set bits instead
of clearing them
fix: 修正 dconfig 状态跟踪中的位操作
1. 修复了属性状态跟踪中错误的位与操作
2. 将 `fetchAndAndOrdered(1 << index)` 改为 `fetchAndAndOrdered(~(1
<< index))`
3. 确保在取消设置属性标志时能正确清除位
4. 修改同时应用于生成的头部文件和生成器工具
5. 若不修复此问题,状态跟踪会错误地设置位而非清除它们
1. Added QPointer include for tracking parent object lifecycle
2. Changed parent initialization to nullptr in constructor for safety
3. Implemented parent object tracking using QPointer to prevent dangling
pointers
4. Added logic to handle parent object deletion during async operation
5. Added proper parent reassignment if parent still exists after
operation
These changes prevent potential crashes when parent objects are deleted
during asynchronous configuration operations, particularly important in
multi-threaded scenarios where parent objects might be destroyed while
operations are pending.
fix: 添加 QPointer 检查确保父对象安全
1. 添加 QPointer 头文件用于跟踪父对象生命周期
2. 构造函数中将父对象初始化为 nullptr 提高安全性
3. 使用 QPointer 实现父对象跟踪,防止悬垂指针
4. 添加处理异步操作期间父对象被删除的逻辑
5. 操作完成后如果父对象仍存在则正确重新设置父对象
这些修改防止了在异步配置操作期间父对象被删除时可能导致的崩溃,对于多线程
场景下父对象可能在操作挂起时被销毁的情况尤为重要。
Updated the dvtablehook.h file to adjust the typedef for Fun2ReturnType
based on changes in Qt 6.9 interfaces. Additionally, the main.cpp
file now casts the unicode value to short to prevent type issues.
These changes are necessary to ensure compatibility with the latest
Qt framework and to resolve the build issues that arise from interface
modifications.
修复: 解决在Qt 6.9上的编译失败
更新了dvtablehook.h文件,以根据Qt 6.9接口的变化调整Fun2ReturnType的
typedef。此外,main.cpp文件现在将unicode值转换为short,以防止类型问题。
这些更改对于确保与最新Qt框架兼容以及解决接口修改引起的构建问题是必要的。
Direct string literal for the property name, because the literal was
use on the Q_PROPERTY macro, so use the hex encode for the property name
strings can't avoid the Chinese text codec problems.