ConfigureConnectionLanes: reconfiguring lanes can leave one lane in a stale priority class
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- À l'abandon
- Stack technique
- cpp
- Domaine
- networking
Piste de recherche
Read CSteamNetworkConnectionBase::SNP_ConfigureLanes in steamnetworkingsockets_snp.cpp, focusing on the loop that merges sorted priority classes and assigns m_idxPriorityClass. Reproduce by swapping lane priorities, then check lane status; also try priorities {0, 1, 2} followed by {1, 1, 0} to expose the out-of-bounds case. Done means every lane's class matches the current priorities after each configuration; linked PR #454 is already open.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happens
The docs for ConfigureConnectionLanes say lanes may be reconfigured at any time. When a connection reconfigures its lanes, the lane with the lowest priority value (the one that sorts first) keeps whatever m_idxPriorityClass it had from the previous configuration. Every other lane gets its class index reassigned.
Swapping priorities on two lanes is enough to see it. Lane 1 should now be strictly ahead of lane 0, but it stays in class 1 next to lane 0. Class 0 ends up with no lanes, and the two lanes share bandwidth by weight instead of by priority.
If the stale index is greater than or equal to the new number of priority classes, m_vecPriorityClasses[ l.m_idxPriorityClass ] in the "Setup each lane" loop reads past the end of the vector. For example: priorities { 0, 1, 2 }, then { 1, 1, 0 }. Lane 2 keeps class 2, but there are now only 2 classes.
What should happen
After every call, each lane's priority class should match the priorities passed to that call.
Minimal repro
// hSender from CreateSocketPair( ..., true, ... ), fixed send rate of 128 KB/s
int prio1[2] = { 0, 1 };
ConfigureConnectionLanes( hSender, 2, prio1, nullptr );
int prio2[2] = { 1, 0 };
ConfigureConnectionLanes( hSender, 2, prio2, nullptr );
// queue 64 KB of unreliable messages on each lane, then:
GetConnectionRealTimeStatus( hSender, &status, 2, laneStatus );
Expected: lane 1 queue time is about 500 ms and lane 0 is about 1000 ms.
Actual: both lanes report 1000 ms, because they are scheduled in the same class.
Root cause
In CSteamNetworkConnectionBase::SNP_ConfigureLanes (steamnetworkingsockets_snp.cpp), the loop that merges sorted priority classes starts at j = 1 and only assigns m_idxPriorityClass for pPriorityClass[j]. The entry at sorted position 0 is never assigned. On the first configuration this goes unnoticed, because a newly created lane defaults to class 0. On a later reconfiguration, that lane may already exist with a nonzero class.
- Langage dominant
- C++
- Étoiles
- 10k
- Forks
- 767
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ValveSoftware/GameNetworkingSockets
-
ICE (native client): relay-only connections time out against a real TURN server; host-socket checks starve the relay pairsPeut-être pris @Mr444-dev l’a pris il y a 4 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
ValveSoftware/GameNetworkingSockets#452 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 4/5 Plus d'une semaine Accessibilité débutants 12/100
ValveSoftware/GameNetworkingSockets#465 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
ValveSoftware/GameNetworkingSockets#464 ·
Les mainteneurs répondent en général sous 2 jours
-
Assertion Failed: pSock->m_callback.m_fnCallback (socketthread.cpp:2609) after re-initializing the library with GameNetworkingSockets_Kill + GameNetworkingSockets_InitPeut-être pris @siddiqueirshad l’a pris il y a 10 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
ValveSoftware/GameNetworkingSockets#458 ·
Les mainteneurs répondent en général sous 2 jours
-
ISteamNetworkingSockets: Trying to use over 8 network lanes/channels failsPeut-être pris @jpggvilaca l’a pris il y a 14 jours. Ouverte
Difficulté 4/5 1-2 jours Accessibilité débutants 55/100
ValveSoftware/GameNetworkingSockets#455 ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de ValveSoftware/GameNetworkingSockets
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Sunrisepeak/mcpp-language-server#80 ·
Les mainteneurs répondent en général sous 1 jour
-
#2754 make deepseek api not workOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
xiaoyifang/goldendict-ng#3148 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 91/100
triton-inference-server/server#9069 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 4 jours