Skip to content

Commit 597ea47

Browse files
committed
fix: move connection selection before network enable
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
1 parent a2b3532 commit 597ea47

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

network-service-plugin/src/system/networkthread.cpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,22 @@ QString NetworkThread::setPropVpnEnabled(bool enabled)
277277

278278
QString NetworkThread::enableDevice(NetworkManager::Device::Ptr device)
279279
{
280+
auto availableConnections = device->availableConnections();
281+
qCDebug(DSM()) << "available connections:" << availableConnections;
282+
QString connPath0;
283+
QDateTime maxTs;
284+
for (auto &&connPath : availableConnections) {
285+
auto settings = connPath->settings();
286+
if (!settings->autoconnect()) {
287+
continue;
288+
}
289+
QDateTime ts = settings->timestamp();
290+
if (maxTs < ts || connPath0.isEmpty()) {
291+
maxTs = ts;
292+
connPath0 = connPath->path();
293+
}
294+
}
295+
280296
bool enabled = NetworkManager::isNetworkingEnabled();
281297
if (!enabled) {
282298
NetworkManager::setNetworkingEnabled(true);
@@ -295,20 +311,6 @@ QString NetworkThread::enableDevice(NetworkManager::Device::Ptr device)
295311
}
296312

297313
// device->setManaged(true); // TODO: 应该不需要
298-
auto connPaths = device->availableConnections();
299-
qCDebug(DSM()) << "available connections:" << connPaths;
300-
QString connPath0;
301-
QDateTime maxTs;
302-
for (auto &&connPath : connPaths) {
303-
auto settings = connPath->settings();
304-
if (!settings->autoconnect()) {
305-
continue;
306-
}
307-
QDateTime ts = settings->timestamp();
308-
if (maxTs < ts || connPath0.isEmpty()) {
309-
connPath0 = connPath->path();
310-
}
311-
}
312314
return connPath0.isEmpty() ? "/" : connPath0;
313315
}
314316

0 commit comments

Comments
 (0)