Repository navigation
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
| Check name | Status | Explanation | Resolution |
|---|---|---|---|
| Docstring Coverage | Docstring coverage is 21.43% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 14 functions across 4 files. | Write docstrings for the functions missing them to satisfy the coverage threshold. |
✅ Passed checks (4 passed)
-
Check name Status Explanation Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled. Title check ✅ Passed The title clearly identifies the two main changes: WebSocket message reception and repeated web-server startup handling. Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request. Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
-
🧪 Generate unit tests (beta)
-
- Create a new PR
-
- Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Autopilot is currently an internal CodeRabbit preview.
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands.
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
bfcc2c5 to
cb5e7f8
Compare
# Conflicts: # src/OneScript.Web.Server/WebServer.cs
cb5e7f8 to
dc9bd18
Compare
| finally | ||
| { | ||
| _app.DisposeAsync().AsTask().Wait(); | ||
| System.Threading.Volatile.Write(ref _isRunning, 0); |
There was a problem hiding this comment.
А не проще было бы volatile bool поле объявить, чем вот эту конструкцию использовать?
There was a problem hiding this comment.
volatile дает только видимость, а тут надо проверить и выставить одним действием: два Запустить из разных потоков оба прочитали бы Ложь и оба запустили бы сервер. Могу переписать на lock с обычным bool, если так понятнее.
ПолучитьСтроку и ПолучитьДвоичныеДанные писали весь буфер на 1024 байта и возвращали внутренний массив потока - в конце сообщения был мусор. Прием сообщений идет под блокировкой: два задания на одном сокете падали с InvalidOperationException. Повторный Запустить того же сервера подменял приложение, и Остановить не останавливал первый запуск - теперь это ошибка. Обертки свойств контекста запроса создаются под блокировкой. Co-Authored-By: Claude Opus 5.5 <[email protected]>
dc9bd18 to
14fb34a
Compare
|

0 New Issues
0 Fixed Issues
0 Accepted Issues
No data about coverage (36.90% Estimated after merge)
ВебСокет.ПолучитьСтроку()иПолучитьДвоичныеДанные()писали в результат весь буфер на 1024 байта, а неresult.Count, и возвращалиGetBuffer()— в конце любого сообщения был мусор/нули. Теперь только полученные байты.Прием сообщений идет под блокировкой: WebSocket допускает одно ожидающее получение, и два задания, читающие один сокет, падали с
InvalidOperationException; сообщение из нескольких частей читает один поток целиком.Повторный
ВебСервер.Запустить()(например, из фонового задания) подменял приложение: первый запуск потом освобождал чужое, аОстановить()первый запуск не останавливал. Теперь это ошибка «Веб-сервер уже запущен». Заодно обертки свойств контекста запроса создаются под блокировкой — контекст могут передать в задания.Тесты
WebServerConcurrencyTestsв Core.Tests.🤖 Generated with Claude Code
Summary by CodeRabbit