On 3/18/24 16:50, Thomas Lamprecht wrote:
On 18/03/2024 14:44, Dominik Csapak wrote:
since some time (not sure when exactly), the 'load()' method of the edit
window did not correctly mask the window anymore

the reason seems to be that the API2Request tries to mask the component
before it's rendered, and that did never work correctly judging from the
existing comment.

Instead of simply calling `setLoading`, test if the component is
rendered, and if not, mask it after it has finished it's layout.

Since we cannot guarantee that the 'afterlayout' event is triggered
before the api call response handler, add a unique id marker to the
waitMsgTarget that is delted when the loading is done, and only trigger

s/delted/deleted/

And why do we need setting a unique ID here and not just a flag?
Can a second load be triggered before the first one finished?

yes, my thought here (that i forgot to mention) was that when
we have multiple API2Requests their start/finish and the 'afterlayout'
may overlap so i only wanted to activate the mask when this load
was not finished

thinking about it a bit more though, i think what would be better here
is a ref counting of running api2 requests on that waitMsgTarget
and only unmask when the count reaches zero... I'll send a v2 for that


the masking if this marker is still there. (thankfully javascript is
single threaded so this should not end up being a data race)

Note that async could cause data races also in single-threaded
code, but as we do not use that here and no yield point exist
that doesn't matter here – just mentioning it because the statement
would suggest that one could not have code that is susceptible to
such a race at all in JavaScript, which is not true.

true, but those can only happen (as you mentioned) at yield points (await)
and since most of our code is non-async i did not mention it here, but
yeah one additional sentence about it being non async is probably warranted



Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
sending as RFC because i'm unsure if we accidentally broke the masking
somewhere along the way. AFAICS from the current code, this never could have
worked properly? anyway, i'll be looking into that sometimes soon, and
this patch should be correct anyway...

it surely did sometimes in the past, maybe ExtJS 7?


yeah maybe, I'll see if i can find out when it still worked and why..
could also be general browser behavior change though


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to