From c8e3de3d2350c7e39e953f19614cc64604915f63 Mon Sep 17 00:00:00 2001 From: caixiangrong Date: Mon, 19 Jan 2026 13:38:07 +0800 Subject: [PATCH] fix: move connection selection before network enable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The connection selection logic was moved to the beginning of enableDevice function to ensure it runs before enabling networking. This prevents potential race conditions where network connections might change after enabling the device. The connection selection algorithm now correctly updates maxTs variable when finding the most recent autoconnect connection. Log: Fixed connection selection timing issue during device activation Influence: 1. Test device activation with multiple available connections 2. Verify autoconnect functionality works correctly 3. Check that the most recent connection is properly selected 4. Test network activation with disabled networking 5. Verify connection selection when no autoconnect connections exist fix: 将连接选择逻辑移到网络启用之前 连接选择逻辑被移到 enableDevice 函数的开头,确保在网络启用之前运行。这可 以防止在启用设备后网络连接可能发生变化的潜在竞争条件。连接选择算法现在在 找到最新的自动连接连接时正确更新 maxTs 变量。 Log: 修复设备激活期间连接选择时机问题 Influence: 1. 测试具有多个可用连接时的设备激活 2. 验证自动连接功能正常工作 3. 检查是否正确选择了最新连接 4. 测试网络禁用状态下的网络激活 5. 验证没有自动连接连接时的连接选择 PMS: BUG-336935 --- .../src/system/networkthread.cpp | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/network-service-plugin/src/system/networkthread.cpp b/network-service-plugin/src/system/networkthread.cpp index 844123e1..c8b70c81 100644 --- a/network-service-plugin/src/system/networkthread.cpp +++ b/network-service-plugin/src/system/networkthread.cpp @@ -277,6 +277,22 @@ QString NetworkThread::setPropVpnEnabled(bool enabled) QString NetworkThread::enableDevice(NetworkManager::Device::Ptr device) { + auto connPaths = device->availableConnections(); + qCDebug(DSM()) << "available connections:" << connPaths; + QString connPath0; + QDateTime maxTs; + for (auto &&connPath : connPaths) { + auto settings = connPath->settings(); + if (!settings->autoconnect()) { + continue; + } + QDateTime ts = settings->timestamp(); + if (maxTs < ts || connPath0.isEmpty()) { + maxTs = ts; + connPath0 = connPath->path(); + } + } + bool enabled = NetworkManager::isNetworkingEnabled(); if (!enabled) { NetworkManager::setNetworkingEnabled(true); @@ -295,20 +311,6 @@ QString NetworkThread::enableDevice(NetworkManager::Device::Ptr device) } // device->setManaged(true); // TODO: 应该不需要 - auto connPaths = device->availableConnections(); - qCDebug(DSM()) << "available connections:" << connPaths; - QString connPath0; - QDateTime maxTs; - for (auto &&connPath : connPaths) { - auto settings = connPath->settings(); - if (!settings->autoconnect()) { - continue; - } - QDateTime ts = settings->timestamp(); - if (maxTs < ts || connPath0.isEmpty()) { - connPath0 = connPath->path(); - } - } return connPath0.isEmpty() ? "/" : connPath0; }