Reentrability problem - user can initiate two "nestes" screenshotting sessions


DotNet is rather slow to initialize for first time, twice so on HDD not SSD.

Also, Greenshot seems not always able to intercept PrtSc hotkey. Maybe other apps try to do it too (albeit i don't know any).
Also, computer box has other programs running (and using RAM), so it takes some paging out before .Net runtime gets loaded and GreenShot UI gets rendered.

All in all, pressing PrtSc i am never totally sure GS will or will not intercept and kick in.

So, i decided to screenshot a program on left monitor while typing mail in the right monitor. I pressed PrtSc.
Nothing seemed to happen.
After a second or two, figuring GS probably is not kicking in and usual clipboard printscreen is going on, i switched to the app to snapshot and pressed Alt-PrtSc.

After that GS finally did kicked in and did rendered the "crop selection" UI.

Problem - it did not offer neither to DO the snapshotting nor to cancel it.
It seems that this initial loading delay confused GS mightily, and lacking internal re-entry locks, it managed to make TWO simultaneously going snapshoting sesstions.

In retrospect, it looks like
1) when i did selected a crop - the usual menu was presented, but it was invisible behind another crop selection canvas.
2) i could not press Esc to get out of the lock, the crop selection mode was not cancelling
3) i could not click GS tray icon to try to exit or somehow cancel snapshotting session - it just offeref the same crop selection instead (in retrospect, that was not a real GS tray icon, but a still picture of it on the temporayr surface) the end i managed to switch myself out of my misery and into the real desktop using Alt+Esc old school combo. There i could see some GS action menus, etc.

But i actually started thinking about hitting Reset - the sustem UI looked as totally locked down in GS-only mode.


Global system UI is important artifact. You should have an exclusive lock inside GS, if one snapshotting session is starting to initialize - it should not let any concurrent sessions to proceed and create race conditions for user to resolve.


Windows 7 x64, .Net 4.8, HDD, dual-monitor


Arioch The
September 23, 2020, 3:39 AM

Reentrability → Reentrance, perhaps. “nestes” → “nested”




Arioch The

Affects versions