IDE throwing "prSetEdited" errors

Hi,

I got regularly my IDE throwing “prSetEdited” errors.
Usually when starting the IDE.

WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
ERROR: Message 'prSetEdited' not understood.
RECEIVER:
   nil
ARGS:
   Integer 1
CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Object:doesNotUnderstand
		arg this = nil
		arg selector = 'prSetEdited'
		arg args = [*1]
	Process:interpretCmdLine
		arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'prSetEdited' not understood.
RECEIVER: nil

Today I got another similar one when closing a file:

WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
WARNING: Attempted to modify missing Text Mirror for Document {caf6d83d-8600-42a0-b0c3-49b8c508b15b}
ERROR: Message 'closed' not understood.
RECEIVER:
   nil
ARGS:
CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Object:doesNotUnderstand
		arg this = nil
		arg selector = 'closed'
		arg args = [*0]
	Process:interpretCmdLine
		arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'closed' not understood.
RECEIVER: nil

Any idea what could cause that ?
I don’t observe any wrong behaviour after those errors. But I just wonder if I’m the only one facing this.

I’m using 3.11.2 on Windows10. And it’s a fresh installation. No extensions, no quarks, …

PS: For the error on close I got today, I had my keyboard shortcuts and some of my class files copied to this new installation, in the meantime.

I’ve got the same problem here. Windows 10 and SC 3.11.2 and quite some quarks.
Whenever I save a file in IDE.

ERROR: Message 'prSetEdited' not understood.
RECEIVER:
   nil
ARGS:
   Integer 1
CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Object:doesNotUnderstand
		arg this = nil
		arg selector = 'prSetEdited'
		arg args = [*1]
	Process:interpretCmdLine
		arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'prSetEdited' not understood.
RECEIVER: nil

It’s a known issue, but not known why.

hjh

On windows 10, my father recently had a problem that blender 3d all of a sudden refused to save files, no matter where on the file system.

After a long search, it turned out windows had enabled some kind of “ransomware protection” (they call it “controlled folder access”) preventing blender from modifying anything on the file system and the only way to get it working again was to explicitly whitelist blender as “not ransomware”.

Maybe something to check?

  1. Open Start.
  2. Search for Windows Security and click the top result to open the app.
  3. Click on Virus & threat protection.
  4. Under the “Ransomware protection” section, click the Manage ransomware protection option. Source: Windows Central
  5. Click the Allow an app through Controlled folder access option. Source: Windows Central
  6. Click the Add an allowed app button.
  7. Select the Recently blocked apps option to whitelist an app you trust has been flagged as malicious. Or click the Browse all apps option. Source: Windows Central
  8. Select the app executable (for example, chrome.exe) you want to allow through this feature.
  9. Click the Open button.

Once you complete the steps, the app won’t be blocked by the feature, and it’ll be able to make changes to files.

How to enable ransomware protection using Group Policy

To enable Windows 10’s ransomware protection with Group Policy, use these steps:

  1. Open Start.
  2. Search for gpedit and click the top result to open the Local Group Policy Editor.
  3. Browse the following path:Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus > Microsoft Defender Exploit Guard > Controlled Folder AccessQuick note: If you’re still on Windows 10 version 1909 or earlier, the path is slightly different: Computer Configuration > Administrative Templates > Windows Components > Windows Defender Antivirus > Windows Defender Exploit Guard > Controlled Folder Access
  4. Double-click the Configure Controlled folder access policy on the right side. Source: Windows Central
  5. Select the Enabled option.
  6. Under the “Options” section, use the drop-down menu and select the Block option. Source: Windows Central
  7. Click the Apply button.
  8. Click the OK button.

Hm, I don’t immediately understand how ransomware protection on the filesystem would affect this issue.

The root of the issue is that every document that is open in the IDE is mirrored in sclang memory. This is so that you can access Document contents, or its dirty status (.isEdited), synchronously in the language.

When you type a character into a document, SC-IDE does two things:

  • Sends an IPC (interprocess communication) message to sclang telling it that the document has been edited.
  • Sends an IPC message to sclang telling it to insert the character at a specific location in the sclang doc string.

If it can’t find the sclang document reference, then:

  • The “edited” status change will try to call prSetEdited on nil = “ERROR: Message ‘prSetEdited’ not understood.”
  • The mirror update (in SC-IDE code) will fail with “WARNING: Attempted to modify missing Text Mirror for Document (name).”

The catch is that the document references should always be synchronized between IDE and language. (The ScIDE class calls handshake during library init, and this calls this.send(\requestDocumentList);. After this, all open documents in the IDE should be reflected in the language. But clearly this is not always working.)

When I said the reason is unknown, what I meant is: We don’t know why, in Windows (and only in Windows), document references go missing.

Unless the IPC calls are using the filesystem, AFAICS filesystem protection features would be irrelevant. (No harm to try, of course, but I wouldn’t expect any improvement.)

hjh

I was kind of triggered by the bug decriptions of the linked bugs “prSetEdited errors … when saving files”. I thought that - if saving gets some weird error - something else might go wrong later as well. Also user aiode explicitly mentioned saving files. But I agree it’s a long shot in the dark :slight_smile:

Sure, that’s a reasonable guess.

I’ve seen text mirror errors when typing. Not often but it can happen.

hjh