You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore: bump version to 2.3.1 and update documentation
Updated version across all files and documentation for v2.3.1 release:
- api.py: Updated FastAPI version and health endpoint version
- tests/test_api_integration.py: Updated version assertion
- README.md: Updated version badge and title
- CHANGELOG.md: Added comprehensive v2.3.1 release notes
Changes include:
- Detailed documentation of the race condition fix
- Explanation of the problem, root cause, and solution
- Testing verification notes
- Use cases where the bug could occur
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+20Lines changed: 20 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,26 @@ All notable changes to Pi Camera Service will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [2.3.1] - 2025-11-22
9
+
10
+
### Fixed
11
+
12
+
#### Critical Race Condition in Camera Reconfiguration
13
+
-**CRITICAL BUG FIX**: Added global lock to prevent race conditions in concurrent camera reconfiguration
14
+
-**Problem**: Multiple simultaneous requests to change resolution or framerate could cause:
15
+
- Service crashes with "Failed to set framerate" errors
16
+
- Internal server errors and deadlocks
17
+
- Streaming interruptions and inconsistent camera state
18
+
-**Root cause**: While `StreamingManager` and `CameraController` had internal locks, there was no global lock protecting the complete stop→reconfigure→start sequence at the API level
19
+
-**Solution**: Added `_reconfiguration_lock` (RLock) in `api.py` to serialize all reconfiguration operations
20
+
-**Impact**: Concurrent requests to `/v1/camera/resolution` and `/v1/camera/framerate` now execute sequentially and safely
21
+
-**Testing**: Verified with multiple concurrent requests - all now succeed without errors or crashes
22
+
23
+
This was an intermittent, timing-dependent bug that could occur when:
0 commit comments