Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
@npasserini @PalumboN @lspigariol , no los quiero alarmar... pero le tengo bastante fe a estos toques. Estuve testeando con JConsole los deadlocks porque de casualidad me apareció y encontré el origen del problema:
la clase WollokGlobalScopeProvider tenía este método sincronizado
El tema es que importedObjects también tenía su método sincronizado:
Fíjense que estamos accediendo a la cache que es MapBasedWollokGlobalScopeCache, y el método get, es (era) también sincronizado... y adentro todo bien si es sincronizado y la cache te trae los EObject de la URI. Pero si no está la URI la primera vez, ejecuta ifAbsentBlock.apply, que es el doImportedObjects de WollokGlobalScopeProvider.
O sea, si estoy levantando el entorno como un campeón, y justo, justo, justo, el editor decide que quiere refrescar la vista, o bien cualquier otro elemento visual desde otro Thread necesita acceder a información de las URIs de Wollok, kaboom! En cuanto se entrelazan esos threads ninguno suelta al WollokGlobalScopeProvider y Wollok termina en un deadlock. Esto pasa especialmente cuando renombrás el archivo y el editor necesita refrescar los recursos asociados, y en algunos otros casos.
Lo ideal sería testearlo bastante, yo probé mucho agarrar un import y borrarlo y volverlo a poner, modificar el editor y tratar de grabarlo muchas veces rápido, para ver si no salta el popup molesto que aparecía hace algunos años y que se solucionó con estos synchronized. No me apareció ni una vez, y tampoco tuve deadlocks. Lo ideal sería que se bajen esta versión y lo prueben, sobre todo con workspaces rotos que no levantan ni a palos (a mí me anduvieron).
El único tema que sí noté es que cuando vos cambiás algún archivo de la biblioteca de Wollok (lang, lib, etc.) el workspace anterior no te sirve, queda roto (es como si quedara linkeado con los EObject viejos). Pero eso sigue siendo mejor que quedar bloqueado eternamente.