shithub: m8c

Download patch

ref: c209f5c67a58bc61495698a30a85198d3d4b255e
parent: 0ff5d079ae3fb69df0f01a5808b089ce954a10cf
author: laamaa <jonne.kokkonen@gmail.com>
date: Mon Sep 22 15:19:18 EDT 2025

rtmidi backend: recover a little better from device that becomes nullptr

--- a/src/backends/m8_rtmidi.c
+++ b/src/backends/m8_rtmidi.c
@@ -126,11 +126,15 @@
 
 static void close_and_free_midi_ports(void) {
   SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM, "Freeing MIDI ports");
-  rtmidi_in_cancel_callback(midi_in);
-  rtmidi_close_port(midi_in);
-  rtmidi_close_port(midi_out);
-  rtmidi_in_free(midi_in);
-  rtmidi_out_free(midi_out);
+  if (midi_in != NULL) {
+    rtmidi_in_cancel_callback(midi_in);
+    rtmidi_close_port(midi_in);
+    rtmidi_in_free(midi_in);
+  }
+  if (midi_out != NULL) {
+    rtmidi_close_port(midi_out);
+    rtmidi_out_free(midi_out);
+  }
   midi_in = NULL;
   midi_out = NULL;
   midi_sysex_received = false;
@@ -147,6 +151,11 @@
 }
 
 static int detect_m8_midi_device(const int verbose, const char *preferred_device) {
+  if (midi_in->ptr == NULL) {
+    midi_in = NULL;
+    midi_out = NULL;
+    return -1;
+  }
   int m8_midi_port_number = -1;
   const unsigned int ports_total_in = rtmidi_get_port_count(midi_in);
   if (verbose)
@@ -172,7 +181,7 @@
 }
 
 static int device_still_exists(void) {
-  if (midi_in == NULL || midi_out == NULL) {
+  if (midi_in->ptr == NULL || midi_out->ptr == NULL) {
     return 0;
   };
 
--