diff --git a/evaluation.md b/evaluation.md index a68fd13..7943b9e 100644 --- a/evaluation.md +++ b/evaluation.md @@ -5,7 +5,7 @@ | Category | Rating | Remarks | |--------------------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| | Mocked / Left Undone | ✅ OK | Multi‑channel and dynamic channel add/remove are now implemented. Control key (note 64) is handled as a modifier for command selection. Backward compatibility for note 1, 60, 61 retained. | -| Potential Segfaults | ✅ OK | No obvious segfaults: all buffer accesses are bounds‑checked (e.g., `record_pos < LOOP_BUF_SIZE`), and null pointer checks exist. | +| Potential Segfaults | ✅ Fixed | Added null checks for both `audio_in` and `audio_out` in the process callback, and `channel_add` no longer marks the channel active if port registration fails. | | Memory Safety | ✅ OK | No dynamic memory allocation; only a fixed‑size global buffer. No leaks, no use‑after‑free. | | Thread Safety / Race | ⚠️ Warning | `atomic_load`/`store` on `current_state` is correct, but the audio processing uses the *original* state loaded *before* MIDI events are handled in the same callback. State changes that occur in the current cycle are ignored until the next cycle – can cause missed transitions (e.g., start recording one cycle late). | | Performance | ✅ OK | Linear buffer access, no system calls or allocations in the real‑time callback. Atomic operations are cheap. Fixed buffer size (0.96 MB) is safe. |