chamilo / chamilo-lms

Chamilo is a learning management system focused on ease of use and accessibility
https://chamilo.org
GNU General Public License v3.0
813 stars 487 forks source link

Race condition dans lp_controller.php #2980

Open meuhland opened 5 years ago

meuhland commented 5 years ago

Juste pour valider ma logique j'aimerais discuter de ce cas avec la communauté :)

Avec un parcours d'une certaine taille (ce n'est pas 100% consistant).

Lors de l'ajout d'une nouvelle ressource dans le parcours en mode édition (donc un drag de droite à gauche) sous certaines conditions l'ordre d'affiche des ressources (à gauche) est perdu.

Après analyse du flow des opérations il semble que ça soit une race condition...

Lors du drop 2 events arrivent à courte interval "receive" et "update" mais il semble qu'update qui fait buildLPtree qui post le nouvel ordre à lp.ajax.php (case : update_lp_item_order) soit executé avant que le DOM ne soit complètement mis à jour par le get à lp.ajax.php (case: add_lp_item) dans l'event "receive".

Étant donné que de toute façon c'est de l'exécution en double vu le fait que add_lp_item retourne le HTML au complet de la liste de gauche en synchrone la solution simple serait de simplement mettre un if sur "ui.sender === null" dans le update pour éviter la double exécution.

**Serveur

ywarnier commented 4 years ago

Bonjour @meuhland D'abord désolé pour le retard. Ensuite je valide ta logique. Oui, c'est fort possible. Est-ce que tu as pu, depuis, valider cette théorie?

meuhland commented 4 years ago

Ça me semblait stable depuis la mise en place du fix dans mon environement. (Je n'ai pas réentendu parlé de ce bogue-là)