Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ released (Unity: ReflectorNet JSON).
### C# (NuGet)

```xml
<PackageReference Include="com.IvanMurzak.CodeExec" Version="0.4.0" />
<PackageReference Include="com.IvanMurzak.CodeExec.Roslyn" Version="0.4.0" />
<PackageReference Include="com.IvanMurzak.CodeExec" Version="0.4.1" />
<PackageReference Include="com.IvanMurzak.CodeExec.Roslyn" Version="0.4.1" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" /> <!-- your choice, 3.8+ -->
```

Expand Down
2 changes: 1 addition & 1 deletion dotnet/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<Deterministic>true</Deterministic>
<Version>0.4.0</Version>
<Version>0.4.1</Version>
<Authors>Ivan Murzak</Authors>
<Copyright>Copyright (c) 2026 Ivan Murzak</Copyright>
<RepositoryUrl>https://github.com/IvanMurzak/Code-Exec</RepositoryUrl>
Expand Down
6 changes: 4 additions & 2 deletions spec/contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,8 +304,10 @@ Lengths are in characters: UTF-16 code units in C#, code points in Python. A lim

## Changelog

- **Unreleased** — C#: a `Monitor.Pulse` sent while a sliced `Monitor.Wait` is between two slices wakes it (it was
lost, and the waiter slept until the budget); the agent's `Monitor.Pulse` / `PulseAll` become guard stand-ins (§3.6).
- **v0.4.1** — C#: the guard keeps its per-thread state in a `ThreadLocal` instead of a `[ThreadStatic]` field of
the collectible snippet assembly (a rare process crash in the .NET 10 GC went away with it); a `Monitor.Pulse` sent
while a sliced `Monitor.Wait` is between two slices wakes it (it was lost, and the waiter slept until the budget);
the agent's `Monitor.Pulse` / `PulseAll` become guard stand-ins (§3.6).
- **v0.4.0** — execution guards (§3.6): C# snippets, full source and includes stop with `Runtime`
(`Recursion too deep`) before a stack overflow and with `Timeout` once `timeoutMs` is spent, also in synchronous code
on the main thread; Python stops with `Timeout` through a watchdog (§4). `timeoutMs` applies to both runtimes; `0`
Expand Down
Loading