Skip to content

Commit d7abe8b

Browse files
committed
Fix a possible race condition during midi autoconnect
1 parent eac0de0 commit d7abe8b

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/drivers/fluid_jack.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ struct _fluid_jack_midi_driver_t
8383
jack_port_t **midi_port; // array of midi port handles
8484
fluid_midi_parser_t *parser;
8585
int autoconnect_inputs;
86-
int autoconnect_is_outdated;
86+
fluid_atomic_int_t autoconnect_is_outdated;
8787
};
8888

8989
static fluid_jack_client_t *new_fluid_jack_client(fluid_settings_t *settings,
@@ -136,7 +136,7 @@ fluid_jack_midi_autoconnect(jack_client_t *client, fluid_jack_midi_driver_t *mid
136136
jack_free(midi_source_ports);
137137
}
138138

139-
midi_driver->autoconnect_is_outdated = FALSE;
139+
fluid_atomic_int_set(&midi_driver->autoconnect_is_outdated, FALSE);
140140
}
141141

142142
/*
@@ -708,7 +708,7 @@ fluid_jack_driver_process(jack_nframes_t nframes, void *arg)
708708

709709
if(midi_driver)
710710
{
711-
if(midi_driver->autoconnect_is_outdated)
711+
if(fluid_atomic_int_get(&midi_driver->autoconnect_is_outdated))
712712
{
713713
fluid_jack_midi_autoconnect(client->client, midi_driver);
714714
}
@@ -820,7 +820,7 @@ fluid_jack_port_registration(jack_port_id_t port, int is_registering, void *arg)
820820

821821
if(client_ref->midi_driver != NULL)
822822
{
823-
client_ref->midi_driver->autoconnect_is_outdated = client_ref->midi_driver->autoconnect_inputs && is_registering != 0;
823+
fluid_atomic_int_set(&client_ref->midi_driver->autoconnect_is_outdated, client_ref->midi_driver->autoconnect_inputs && is_registering != 0);
824824
}
825825
}
826826

@@ -865,7 +865,7 @@ new_fluid_jack_midi_driver(fluid_settings_t *settings,
865865
}
866866

867867
fluid_settings_getint(settings, "midi.autoconnect", &dev->autoconnect_inputs);
868-
dev->autoconnect_is_outdated = dev->autoconnect_inputs;
868+
fluid_atomic_int_set(&dev->autoconnect_is_outdated, dev->autoconnect_inputs);
869869

870870
dev->client_ref = new_fluid_jack_client(settings, FALSE, dev);
871871

0 commit comments

Comments
 (0)