void update_lights(const std::map<LightKey, uint8_t> &active_lights)
{
- std::lock_guard<std::mutex> lock(mu);
+ std::lock_guard<std::recursive_mutex> lock(mu);
update_lights_lock_held(active_lights);
}
std::atomic<bool> should_quit{false};
int should_quit_fd;
- mutable std::mutex mu;
+ mutable std::recursive_mutex mu; // Recursive because the MIDI receiver may update_lights() back while we are sending it stuff.
MIDIReceiver *receiver; // Under <mu>.
std::thread midi_thread;