Skip to content

Commit 7d0cb9c

Browse files
committed
fix: solo crash (mutex deadlock) and Windows keyboard duplication
- Fixed solo channel crash on all platforms by moving ui_update_solo_state call outside the client_mutex lock scope in ui_remote.cpp - Fixed Windows keyboard duplication by properly suppressing original WM_CHAR messages in the message hook (gui_win32.cpp) - Updated docs, changelog, and memory bank for v0.133
1 parent f8b5236 commit 7d0cb9c

File tree

7 files changed

+34
-12
lines changed

7 files changed

+34
-12
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to JamWide will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.133] - 2026-01-14
9+
10+
### Fixed
11+
- **All Platforms**: Solo channel no longer crashes (mutex deadlock fix)
12+
- **Windows**: Fixed keyboard duplication in text fields (keys no longer repeat)
13+
814
## [0.131] - 2026-01-13
915

1016
### Added

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ A modern audio plugin client for [NINJAM](https://www.cockos.com/ninjam/) — th
77
![License](https://img.shields.io/badge/license-GPL--2.0-blue.svg)
88
![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows-lightgrey.svg)
99
![Formats](https://img.shields.io/badge/formats-CLAP%20%7C%20VST3%20%7C%20AU-blue.svg)
10-
![Version](https://img.shields.io/badge/version-v0.132-blue.svg)
10+
![Version](https://img.shields.io/badge/version-v0.133-blue.svg)
1111
![Status](https://img.shields.io/badge/status-beta-yellow.svg)
1212

1313
## What is NINJAM?

memory-bank/activeContext.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
## Current Session Focus
44

5-
**Date:** 2026-01-13
5+
**Date:** 2026-01-14
66
**Phase:** 6 - Beta Release
7-
**Status:** ✅ v0.132 Released - Approaching 1.0
7+
**Status:** ✅ v0.133 Released - Approaching 1.0
88

9-
## Latest Build: r132
9+
## Latest Build: r133
1010

1111
### What's Working
1212
- ✅ Plugin loads in GarageBand, Logic Pro (AU), REAPER (CLAP/VST3) - macOS
@@ -29,14 +29,14 @@
2929
- ✅ Anonymous login support
3030
- ✅ Window size 800x1200 for AU (Logic/GarageBand compatibility)
3131

32-
### Recent Changes (v0.119-v0.132)
32+
### Recent Changes (v0.119-v0.133)
3333
| Version | Change |
3434
|---------|--------|
35+
| v0.133 | Fix: Solo crash (mutex deadlock), Windows keyboard duplication |
3536
| v0.132 | macOS/REAPER: Keyboard hint, Chat focus retention, UI polish |
3637
| v0.120 | Pulled Windows bug fix, verified macOS build works |
3738
| v0.119 | Windows: Message hook prevents DAW accelerators during text input |
3839
| v0.117 | Windows: Dummy EDIT control + IME/focus forwarding + null guards |
39-
| v0.108 | UI: Transmit toggle now visible (layout fix) |
4040

4141
### Known Issues
4242
| Issue | Platform | Status |

memory-bank/progress.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
# JamWide - Implementation Progress
22

33
**Project Start:** January 2026
4-
**Current Build:** r132 (v0.132)
4+
**Current Build:** r133 (v0.133)
55
**Status:** ✅ Beta - Ready for user testing, approaching 1.0
66
**Target Platforms:** Windows 10+ (MSVC), macOS 10.15+ (Xcode/Clap)
77
**Plugin Formats:** CLAP, VST3, Audio Unit v2 (via clap-wrapper)
88
**UI Framework:** Dear ImGui (Metal on macOS, D3D11 on Windows)
99
**Language:** C++20 (std::variant/std::optional + designated initializers)
1010
**CI/CD:** GitHub Actions (Windows + macOS builds on tag push)
1111
**Windows Build:** Visual Studio 2022+ (MSVC 19.30+), MSBuild-based, PowerShell install script, ✅ Keyboard focus fixed
12-
**macOS Build:** ✅ REAPER keyboard hint, ✅ Chat focus retention
12+
**macOS Build:** ✅ REAPER keyboard hint, ✅ Chat focus retention, ✅ Solo crash fixed
1313

1414
---
1515

1616
## Release History
1717

1818
| Version | Date | Highlights |
1919
|---------|------|------------|
20+
| v0.133 | 2026-01-14 | Fix: Solo crash (mutex deadlock), Windows keyboard duplication |
2021
| v0.132 | 2026-01-13 | macOS/REAPER keyboard hint, chat focus retention, UI polish |
2122
| v0.119 | 2026-01-12 | Windows: Keyboard focus fix (message hook) |
2223
| v0.117 | 2026-01-12 | Windows: Dummy EDIT control + IME support |
2324
| v0.108 | 2026-01-12 | UI: Transmit toggle visible |
2425
| v0.107 | 2026-01-11 | Fix: License dialog single-click |
2526
| v0.106 | 2026-01-11 | Default 256 kbps audio quality |
2627
| v0.105 | 2026-01-11 | Server browser with usernames |
27-
| v0.104 | 2026-01-11 | AU window 800x1200, setFrameSize |
2828

2929
---
3030

src/build_number.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
#pragma once
2-
#define JAMWIDE_BUILD_NUMBER 132
2+
#define JAMWIDE_BUILD_NUMBER 133

src/platform/gui_win32.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ class GuiContextWin32 : public GuiContext {
6767

6868
const bool is_key_msg =
6969
msg->message == WM_KEYDOWN || msg->message == WM_KEYUP ||
70-
msg->message == WM_SYSKEYDOWN || msg->message == WM_SYSKEYUP ||
70+
msg->message == WM_SYSKEYDOWN || msg->message == WM_SYSKEYUP;
71+
const bool is_char_msg =
7172
msg->message == WM_CHAR || msg->message == WM_SYSCHAR;
7273

7374
if (is_key_msg) {
@@ -79,6 +80,12 @@ class GuiContextWin32 : public GuiContext {
7980
msg->message = WM_NULL;
8081
msg->wParam = 0;
8182
msg->lParam = 0;
83+
} else if (is_char_msg) {
84+
// Suppress original WM_CHAR messages - our TranslateMessage already
85+
// generates them from the redirected WM_KEYDOWN above
86+
msg->message = WM_NULL;
87+
msg->wParam = 0;
88+
msg->lParam = 0;
8289
}
8390

8491
return CallNextHookEx(nullptr, code, wParam, lParam);

src/ui/ui_remote.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ void ui_render_remote_channels(jamwide::JamWidePlugin* plugin) {
2828
return;
2929
}
3030

31+
bool solo_changed = false;
32+
33+
{
3134
std::unique_lock<std::mutex> client_lock(plugin->client_mutex);
3235
NJClient* client = plugin->client.get();
3336
if (!client) {
@@ -144,7 +147,7 @@ void ui_render_remote_channels(jamwide::JamWidePlugin* plugin) {
144147
cmd.set_solo = true;
145148
cmd.solo = solo;
146149
plugin->cmd_queue.try_push(std::move(cmd));
147-
ui_update_solo_state(plugin);
150+
solo_changed = true;
148151
}
149152

150153
ImGui::SameLine();
@@ -162,5 +165,11 @@ void ui_render_remote_channels(jamwide::JamWidePlugin* plugin) {
162165
ImGui::PopID();
163166
}
164167

168+
} // Release client_mutex before updating solo state
169+
170+
if (solo_changed) {
171+
ui_update_solo_state(plugin);
172+
}
173+
165174
ImGui::Unindent();
166175
}

0 commit comments

Comments
 (0)