Browse Source

fix various rt issues reported by stoat

adwaita_split_btn
parent
commit
81b9b33ea5
Signed by: alex
GPG Key ID: 022EAE42313D70F3
  1. 10
      HACKING.md
  2. 9
      INSTALL.md
  3. 3
      inc/actions/undo_manager.h
  4. 13
      inc/audio/midi_event.h
  5. 22
      inc/audio/port.h
  6. 1
      inc/audio/position.h
  7. 28
      inc/audio/track.h
  8. 5
      inc/gui/backend/event_manager.h
  9. 5
      scripts/run_stoat.sh
  10. 1
      src/actions/transport_action.c
  11. 4
      src/audio/automation_track.c
  12. 2
      src/audio/balance_control.c
  13. 3
      src/audio/curve.c
  14. 3
      src/audio/graph_node.c
  15. 4
      src/audio/graph_thread.c
  16. 161
      src/audio/midi_event.c
  17. 2
      src/audio/midi_region.c
  18. 19
      src/audio/port.c
  19. 6
      src/audio/position.c
  20. 3
      src/audio/region.c
  21. 27
      src/audio/track.c
  22. 4
      src/audio/transport.c
  23. 10
      src/plugins/lv2/lv2_ui.c
  24. 4
      src/zrythm_app.c
  25. 2
      tools/meson.build
  26. 8
      tools/stoat_suppressions.txt
  27. 6
      tools/stoat_whitelist.txt

10
HACKING.md

@ -220,9 +220,19 @@ Use the following to get a stoat report. @@ -220,9 +220,19 @@ Use the following to get a stoat report.
CC=stoat-compile CXX=stoat-compile++ meson build
ninja -C build run_stoat
Realtime functions can be annoted as REALTIME or
specified in the whitelist found in
[tools/stoat_whitelist.txt](tools/stoat_whitelist.txt).
Suppressions are found in
[tools/stoat_suppressions.txt](tools/stoat_suppressions.txt).
For more info see
<https://github.com/fundamental/stoat>.
# Cppcheck
ninja -C build cppcheck
# Collecting Translations
To collect all translatable filenames into
`po/POTFILES`, generate the POT file and update

9
INSTALL.md

@ -30,6 +30,15 @@ current configuration, use @@ -30,6 +30,15 @@ current configuration, use
meson compile --clean -C build
To change environment variables (such as `CC` and
`CXX`) while keeping the current configuration, use
MY_ENV_VARIABLE=myvalue meson build --wipe
To start from scratch, remove the `build` directory
rm -rf build
*Hint: If your distro's meson package is too old,
you can either install meson from
[pip](https://pypi.org/project/pip/) or run

3
inc/actions/undo_manager.h

@ -127,6 +127,9 @@ undo_manager_perform ( @@ -127,6 +127,9 @@ undo_manager_perform (
#define UNDO_MANAGER_PERFORM_AND_PROPAGATE_ERR( \
action,err,...) \
{ \
g_return_val_if_fail ( \
router_is_processing_thread (ROUTER) \
== false, false); \
UndoableAction * ua = \
action (__VA_ARGS__); \
if (ua) \

13
inc/audio/midi_event.h

@ -63,6 +63,9 @@ typedef enum MidiEventType @@ -63,6 +63,9 @@ typedef enum MidiEventType
MIDI_EVENT_TYPE_NOTE_OFF,
MIDI_EVENT_TYPE_NOTE_ON,
MIDI_EVENT_TYPE_ALL_NOTES_OFF,
/** Unknown type. */
MIDI_EVENT_TYPE_RAW,
} MidiEventType;
/**
@ -103,6 +106,8 @@ typedef struct MidiEvent @@ -103,6 +106,8 @@ typedef struct MidiEvent
/** Raw MIDI data. */
midi_byte_t raw_buffer[3];
size_t raw_buffer_sz;
} MidiEvent;
typedef struct MidiEvents MidiEvents;
@ -344,6 +349,14 @@ midi_events_add_control_change ( @@ -344,6 +349,14 @@ midi_events_add_control_change (
midi_time_t time,
int queued);
void
midi_events_add_raw (
MidiEvents * self,
uint8_t * buf,
size_t buf_sz,
midi_time_t time,
bool queued);
/**
* Adds a control event to the given MidiEvents.
*

22
inc/audio/port.h

@ -869,8 +869,8 @@ port_has_sound ( @@ -869,8 +869,8 @@ port_has_sound (
NONNULL
void
port_get_full_designation (
Port * self,
char * buf);
Port * const self,
char * buf);
/**
* Gathers all ports in the project and puts them
@ -891,14 +891,14 @@ port_get_all ( @@ -891,14 +891,14 @@ port_get_all (
NONNULL
Track *
port_get_track (
const Port * self,
int warn_if_fail);
const Port * const self,
int warn_if_fail);
NONNULL
Plugin *
port_get_plugin (
Port * self,
bool warn_if_fail);
Port * const self,
const bool warn_if_fail);
/**
* To be called when the port's identifier changes
@ -923,8 +923,8 @@ port_update_identifier ( @@ -923,8 +923,8 @@ port_update_identifier (
NONNULL
static inline int
port_get_dest_index (
Port * self,
Port * dest)
const Port * const self,
const Port * const dest)
{
g_return_val_if_fail (
IS_PORT (self) && IS_PORT (dest) &&
@ -936,6 +936,7 @@ port_get_dest_index ( @@ -936,6 +936,7 @@ port_get_dest_index (
return i;
}
#if 0
char des_src[800];
char des_dest[800];
port_get_full_designation (dest, des_dest);
@ -943,6 +944,7 @@ port_get_dest_index ( @@ -943,6 +944,7 @@ port_get_dest_index (
g_critical (
"failed to get dest index for port %s in %s",
des_dest, des_src);
#endif
g_return_val_if_reached (-1);
}
@ -953,8 +955,8 @@ port_get_dest_index ( @@ -953,8 +955,8 @@ port_get_dest_index (
NONNULL
static inline int
port_get_src_index (
Port * self,
Port * src)
const Port * const self,
const Port * const src)
{
g_return_val_if_fail (
IS_PORT (self) && IS_PORT (src) &&

1
inc/audio/position.h

@ -299,6 +299,7 @@ position_add_seconds ( @@ -299,6 +299,7 @@ position_add_seconds (
* track.
* @param sg SnapGrid options.
*/
NONNULL_ARGS (2)
void
position_snap (
Position * start_pos,

28
inc/audio/track.h

@ -1133,12 +1133,30 @@ AutomationTracklist * @@ -1133,12 +1133,30 @@ AutomationTracklist *
track_get_automation_tracklist (Track * track);
/**
* Returns the channel of the track, if the track type has
* a channel,
* or NULL if it doesn't.
* Returns the channel of the track, if the track
* type has a channel, or NULL if it doesn't.
*/
Channel *
track_get_channel (Track * track);
NONNULL
static inline Channel *
track_get_channel (
const Track * const track)
{
switch (track->type)
{
case TRACK_TYPE_MASTER:
case TRACK_TYPE_INSTRUMENT:
case TRACK_TYPE_AUDIO:
case TRACK_TYPE_AUDIO_BUS:
case TRACK_TYPE_AUDIO_GROUP:
case TRACK_TYPE_MIDI_BUS:
case TRACK_TYPE_MIDI_GROUP:
case TRACK_TYPE_MIDI:
case TRACK_TYPE_CHORD:
return track->channel;
default:
return NULL;
}
}
/**
* Updates the track's children.

5
inc/gui/backend/event_manager.h

@ -96,9 +96,10 @@ typedef struct EventManager @@ -96,9 +96,10 @@ typedef struct EventManager
_ev->lineno = __LINE__; \
_ev->type = et; \
_ev->arg = (void *) _arg; \
/* skip backtrace for now */ \
if (zrythm_app->gtk_thread == \
g_thread_self () && false) \
g_thread_self () \
/* skip backtrace for now */ \
&& false) \
{ \
_ev->backtrace = \
backtrace_get ("", 40, false); \

5
scripts/run_stoat.sh

@ -20,8 +20,11 @@ @@ -20,8 +20,11 @@
set -e
# add the following to get graph
# -G stoat_results.png
cd $MESON_BUILD_ROOT
libstoat=$(whereis libstoat.so | awk -F": " '{ print $2 }')
stoat --recursive . -l $libstoat \
-G stoat_results.png \
--suppression $MESON_SOURCE_ROOT/tools/stoat_suppressions.txt \
--whitelist $MESON_SOURCE_ROOT/tools/stoat_whitelist.txt

1
src/actions/transport_action.c

@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
#include "audio/engine.h"
#include "audio/tempo_track.h"
#include "audio/transport.h"
#include "audio/router.h"
#include "gui/backend/event.h"
#include "gui/backend/event_manager.h"
#include "project.h"

4
src/audio/automation_track.c

@ -444,7 +444,9 @@ automation_track_find_from_port ( @@ -444,7 +444,9 @@ automation_track_find_from_port (
Plugin * pl =
port_get_plugin (port, true);
g_warn_if_fail (pl);
g_return_val_if_fail (
IS_PLUGIN_AND_NONNULL (pl),
NULL);
if (pl->setting->descr->protocol ==
PROT_LV2)

2
src/audio/balance_control.c

@ -47,7 +47,7 @@ balance_control_get_calc_lr ( @@ -47,7 +47,7 @@ balance_control_get_calc_lr (
}
break;
default:
g_warning (
g_critical (
"balance control algorithm not implemented "
"yet");
break;

3
src/audio/curve.c

@ -180,8 +180,7 @@ curve_get_normalized_y ( @@ -180,8 +180,7 @@ curve_get_normalized_y (
}
break;
default:
g_warn_if_reached ();
break;
g_return_val_if_reached (-1);
}
return val;
}

3
src/audio/graph_node.c

@ -284,8 +284,7 @@ process_node ( @@ -284,8 +284,7 @@ process_node (
Track * track = node->track;
if (!IS_TRACK (track))
{
g_warn_if_reached ();
return;
g_return_if_reached ();
}
if (track->type != TRACK_TYPE_TEMPO &&
track->type != TRACK_TYPE_MARKER)

4
src/audio/graph_thread.c

@ -56,6 +56,10 @@ worker_thread (void * arg) @@ -56,6 +56,10 @@ worker_thread (void * arg)
Graph * graph = thread->graph;
GraphNode* to_run = NULL;
/* initialize data for g_thread_self so no
* allocation is done later on */
g_thread_self ();
g_message (
"WORKER THREAD %d created (num threads %d)",
thread->id, graph->num_threads);

161
src/audio/midi_event.c

@ -58,6 +58,41 @@ static const char * midi_event_type_strings[] = @@ -58,6 +58,41 @@ static const char * midi_event_type_strings[] =
"all notes off",
};
/**
* Prints a message saying unknown event, with
* information about the given event.
*/
static void
print_unknown_event_message (
uint8_t * buf,
const int buf_size)
{
if (buf_size == 3)
{
g_message (
"Unknown MIDI event %#x %#x %#x"
" received", buf[0], buf[1], buf[2]);
}
else if (buf_size == 2)
{
g_message (
"Unknown MIDI event %#x %#x"
" received", buf[0], buf[1]);
}
else if (buf_size == 1)
{
g_message (
"Unknown MIDI event %#x"
" received", buf[0]);
}
else
{
g_message (
"Unknown MIDI event of size %d"
" received", buf_size);
}
}
/**
* Appends the events from src to dest
*
@ -489,14 +524,19 @@ midi_events_copy_to_jack ( @@ -489,14 +524,19 @@ midi_events_copy_to_jack (
{
ev = &self->events[i];
midi_data[0] = ev->raw_buffer[0];
midi_data[1] = ev->raw_buffer[1];
midi_data[2] = ev->raw_buffer[2];
for (size_t j = 0; j < ev->raw_buffer_sz;
j++)
{
midi_data[j] = ev->raw_buffer[j];
}
jack_midi_event_write (
buff, ev->time, midi_data, 3);
buff, ev->time, midi_data,
ev->raw_buffer_sz);
#if 0
g_message (
"wrote MIDI event to JACK MIDI out at %d",
ev->time);
#endif
}
}
#endif
@ -533,6 +573,45 @@ midi_events_add_note_off ( @@ -533,6 +573,45 @@ midi_events_add_note_off (
(MIDI_CH1_NOTE_OFF | (channel - 1));
ev->raw_buffer[1] = note_pitch;
ev->raw_buffer[2] = 90;
ev->raw_buffer_sz = 3;
if (queued)
self->num_queued_events++;
else
self->num_events++;
}
void
midi_events_add_raw (
MidiEvents * self,
uint8_t * buf,
size_t buf_sz,
midi_time_t time,
bool queued)
{
if (buf_sz > 3)
{
print_unknown_event_message (buf, buf_sz);
g_return_if_reached ();
}
MidiEvent * ev;
if (queued)
ev =
&self->queued_events[self->num_queued_events];
else
ev =
&self->events[self->num_events];
ev->type = MIDI_EVENT_TYPE_RAW;
ev->channel = 0;
ev->controller = 0;
ev->control = 0;
ev->time = time;
for (size_t i = 0; i < buf_sz; i++)
{
ev->raw_buffer[i] = buf[i];
}
if (queued)
self->num_queued_events++;
@ -573,6 +652,7 @@ midi_events_add_control_change ( @@ -573,6 +652,7 @@ midi_events_add_control_change (
(MIDI_CH1_CTRL_CHANGE | (channel - 1));
ev->raw_buffer[1] = controller;
ev->raw_buffer[2] = control;
ev->raw_buffer_sz = 3;
if (queued)
self->num_queued_events++;
@ -612,6 +692,7 @@ midi_events_add_pitchbend ( @@ -612,6 +692,7 @@ midi_events_add_pitchbend (
midi_get_bytes_from_int (
pitchbend + 8192, &ev->raw_buffer[1],
&ev->raw_buffer[2]);
ev->raw_buffer_sz = 3;
if (queued)
self->num_queued_events++;
@ -656,8 +737,9 @@ midi_events_sort ( @@ -656,8 +737,9 @@ midi_events_sort (
events = self->events;
num_events = (size_t) self->num_events;
}
qsort (events, num_events, sizeof (MidiEvent),
midi_event_cmpfunc);
qsort (
events, num_events, sizeof (MidiEvent),
midi_event_cmpfunc);
}
/**
@ -700,6 +782,7 @@ midi_events_add_note_on ( @@ -700,6 +782,7 @@ midi_events_add_note_on (
(MIDI_CH1_NOTE_ON | (channel - 1));
ev->raw_buffer[1] = note_pitch;
ev->raw_buffer[2] = velocity;
ev->raw_buffer_sz = 3;
if (queued)
self->num_queued_events++;
@ -759,41 +842,6 @@ midi_events_add_note_offs_from_chord_descr ( @@ -759,41 +842,6 @@ midi_events_add_note_offs_from_chord_descr (
}
}
/**
* Prints a message saying unknown event, with
* information about the given event.
*/
static void
print_unknown_event_message (
uint8_t * buf,
const int buf_size)
{
if (buf_size == 3)
{
g_message (
"Unknown MIDI event %#x %#x %#x"
" received", buf[0], buf[1], buf[2]);
}
else if (buf_size == 2)
{
g_message (
"Unknown MIDI event %#x %#x"
" received", buf[0], buf[1]);
}
else if (buf_size == 1)
{
g_message (
"Unknown MIDI event %#x"
" received", buf[0]);
}
else
{
g_message (
"Unknown MIDI event of size %d"
" received", buf_size);
}
}
/**
* Parses a MidiEvent from a raw MIDI buffer.
*
@ -810,6 +858,7 @@ midi_events_add_event_from_buf ( @@ -810,6 +858,7 @@ midi_events_add_event_from_buf (
int buf_size,
int queued)
{
#if 0
if (buf_size != 3)
{
g_debug (
@ -818,8 +867,8 @@ midi_events_add_event_from_buf ( @@ -818,8 +867,8 @@ midi_events_add_event_from_buf (
buf_size > 0 ? buf[0] : 0,
buf_size > 1 ? buf[1] : 0,
buf_size > 2 ? buf[2] : 0, buf_size);
return;
}
#endif
midi_byte_t type = buf[0] & 0xf0;
midi_byte_t channel =
@ -850,8 +899,10 @@ note_off: @@ -850,8 +899,10 @@ note_off:
/* ignore active sensing */
if (buf[0] != 0xFE)
{
#if 0
print_unknown_event_message (
buf, buf_size);
#endif
}
break;
case MIDI_CH1_CTRL_CHANGE:
@ -859,8 +910,8 @@ note_off: @@ -859,8 +910,8 @@ note_off:
self, 1, buf[1], buf[2], time, queued);
break;
default:
print_unknown_event_message (
buf, buf_size);
midi_events_add_raw (
self, buf, (size_t) buf_size, time, queued);
break;
}
}
@ -911,18 +962,30 @@ void @@ -911,18 +962,30 @@ void
midi_event_print (
const MidiEvent * ev)
{
g_message (
char raw[300];
sprintf (raw, "Raw (%zu):", ev->raw_buffer_sz);
for (size_t i = 0; i < ev->raw_buffer_sz;
i++)
{
char part[20];
sprintf (
part, " %hhx", ev->raw_buffer[i]);
strcat (raw, part);
}
char msg[600];
sprintf (
msg,
"~MIDI EVENT~\n"
"Type: %s\n"
"Channel: %u\n"
"Pitch: %u\n"
"Velocity: %u\n"
"Time: %u\n"
"Raw: %hhx %hhx %hhx",
"%s",
midi_event_type_strings[ev->type], ev->channel,
ev->note_pitch,
ev->velocity, ev->time, ev->raw_buffer[0],
ev->raw_buffer[1], ev->raw_buffer[2]);
ev->velocity, ev->time, raw);
}
int
@ -1000,8 +1063,10 @@ midi_events_clear_duplicates ( @@ -1000,8 +1063,10 @@ midi_events_clear_duplicates (
if (midi_events_are_equal (ev1, ev2))
{
#if 0
g_message (
"removing duplicate MIDI event");
#endif
for (k = j; k < NUM_EVENTS; k++)
{
midi_event_copy (

2
src/audio/midi_region.c

@ -958,7 +958,7 @@ midi_region_get_midi_ch ( @@ -958,7 +958,7 @@ midi_region_get_midi_ch (
ret = track->midi_ch;
}
g_warn_if_fail (ret > 0);
g_return_val_if_fail (ret > 0, 1);
return ret;
}

19
src/audio/port.c

@ -1083,6 +1083,7 @@ port_receive_midi_events_from_jack ( @@ -1083,6 +1083,7 @@ port_receive_midi_events_from_jack (
}
}
#if 0
if (self->midi_events->num_events > 0)
{
MidiEvent * ev =
@ -1097,6 +1098,7 @@ port_receive_midi_events_from_jack ( @@ -1097,6 +1098,7 @@ port_receive_midi_events_from_jack (
ev->time, ev->raw_buffer[0],
ev->raw_buffer[1], ev->raw_buffer[2]);
}
#endif
}
void
@ -2483,6 +2485,7 @@ port_sum_data_from_rtmidi ( @@ -2483,6 +2485,7 @@ port_sum_data_from_rtmidi (
}
}
#if 0
if (DEBUGGING &&
self->midi_events->num_events > 0)
{
@ -2498,6 +2501,7 @@ port_sum_data_from_rtmidi ( @@ -2498,6 +2501,7 @@ port_sum_data_from_rtmidi (
ev->time, ev->raw_buffer[0],
ev->raw_buffer[1], ev->raw_buffer[2]);
}
#endif
}
/**
@ -4227,8 +4231,8 @@ port_has_sound ( @@ -4227,8 +4231,8 @@ port_has_sound (
*/
void
port_get_full_designation (
Port * self,
char * buf)
Port * const self,
char * buf)
{
const PortIdentifier * id = &self->id;
@ -4353,8 +4357,8 @@ port_is_connection_locked ( @@ -4353,8 +4357,8 @@ port_is_connection_locked (
Track *
port_get_track (
const Port * self,
int warn_if_fail)
const Port * const self,
int warn_if_fail)
{
g_return_val_if_fail (IS_PORT (self), NULL);
@ -4390,8 +4394,8 @@ port_get_track ( @@ -4390,8 +4394,8 @@ port_get_track (
Plugin *
port_get_plugin (
Port * self,
bool warn_if_fail)
Port * const self,
const bool warn_if_fail)
{
g_return_val_if_fail (IS_PORT (self), NULL);
@ -4424,7 +4428,8 @@ port_get_plugin ( @@ -4424,7 +4428,8 @@ port_get_plugin (
}
Plugin * pl = NULL;
PluginIdentifier * pl_id = &self->id.plugin_id;
const PluginIdentifier * const pl_id =
&self->id.plugin_id;
switch (pl_id->slot_type)
{
case PLUGIN_SLOT_MIDI_FX:

6
src/audio/position.c

@ -271,7 +271,8 @@ closest_snap_point ( @@ -271,7 +271,8 @@ closest_snap_point (
*
* @return Whether a snap point was found or not.
*/
static inline bool
HOT
static bool
get_prev_snap_point (
const Position * pos,
Track * track,
@ -365,7 +366,8 @@ get_prev_snap_point ( @@ -365,7 +366,8 @@ get_prev_snap_point (
*
* @return Whether a snap point was found or not.
*/
static inline bool
HOT
static bool
get_next_snap_point (
const Position * pos,
Track * track,

3
src/audio/region.c

@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
#include "audio/recording_manager.h"
#include "audio/region.h"
#include "audio/region_link_group_manager.h"
#include "audio/router.h"
#include "audio/stretcher.h"
#include "audio/track.h"
#include "gui/widgets/automation_region.h"
@ -312,6 +313,8 @@ region_stretch ( @@ -312,6 +313,8 @@ region_stretch (
break;
case REGION_TYPE_AUDIO:
{
g_return_if_fail (
router_is_processing_thread (ROUTER));
AudioClip * clip =
audio_region_get_clip (self);
int new_clip_id =

27
src/audio/track.c

@ -2634,33 +2634,6 @@ track_get_automation_tracklist (Track * track) @@ -2634,33 +2634,6 @@ track_get_automation_tracklist (Track * track)
return NULL;
}
/**
* Returns the channel of the track, if the track type has
* a channel,
* or NULL if it doesn't.
*/
Channel *
track_get_channel (Track * track)
{
g_warn_if_fail (track);
switch (track->type)
{
case TRACK_TYPE_MASTER:
case TRACK_TYPE_INSTRUMENT:
case TRACK_TYPE_AUDIO:
case TRACK_TYPE_AUDIO_BUS:
case TRACK_TYPE_AUDIO_GROUP:
case TRACK_TYPE_MIDI_BUS:
case TRACK_TYPE_MIDI_GROUP:
case TRACK_TYPE_MIDI:
case TRACK_TYPE_CHORD:
return track->channel;
default:
return NULL;
}
}
/**
* Returns the region at the given position, or
* NULL.

4
src/audio/transport.c

@ -476,8 +476,6 @@ void @@ -476,8 +476,6 @@ void
transport_request_roll (
Transport * self)
{
g_message ("requesting roll");
if (!ZRYTHM_TESTING)
{
/* handle countin */
@ -517,9 +515,11 @@ transport_request_roll ( @@ -517,9 +515,11 @@ transport_request_roll (
self->preroll_frames_remaining =
self->playhead_pos.frames - pos.frames;
transport_set_playhead_pos (self, &pos);
#if 0
g_debug (
"preroll %ld frames",
self->preroll_frames_remaining);
#endif
}
}

10
src/plugins/lv2/lv2_ui.c

@ -138,7 +138,7 @@ lv2_ui_read_and_apply_events ( @@ -138,7 +138,7 @@ lv2_ui_read_and_apply_events (
ev.size) !=
ev.size)
{
g_warning (
g_critical (
"Error reading from UI ring buffer");
break;
}
@ -162,6 +162,7 @@ lv2_ui_read_and_apply_events ( @@ -162,6 +162,7 @@ lv2_ui_read_and_apply_events (
port, * (float *) body, 0, 0);
port->received_ui_event = 1;
#if 0
/* note: should not be printing in the
* realtime thread */
g_debug (
@ -171,6 +172,7 @@ lv2_ui_read_and_apply_events ( @@ -171,6 +172,7 @@ lv2_ui_read_and_apply_events (
port->id.label,
(double) * (float *) body,
have_custom_ui);
#endif
}
else if (ev.protocol ==
PM_URIDS.atom_eventTransfer)
@ -184,6 +186,7 @@ lv2_ui_read_and_apply_events ( @@ -184,6 +186,7 @@ lv2_ui_read_and_apply_events (
(const uint8_t*)
LV2_ATOM_BODY_CONST(atom));
#if 0
/* note: should not be printing in the
* realtime thread */
g_debug (
@ -192,10 +195,11 @@ lv2_ui_read_and_apply_events ( @@ -192,10 +195,11 @@ lv2_ui_read_and_apply_events (
__func__, plugin->plugin->setting->descr->name,
port->id.label,
have_custom_ui);
#endif
}
else
{
g_warning (
g_critical (
"Unknown control change protocol %d",
ev.protocol);
}
@ -218,11 +222,13 @@ lv2_ui_send_control_val_event_from_plugin_to_ui ( @@ -218,11 +222,13 @@ lv2_ui_send_control_val_event_from_plugin_to_ui (
lv2_plugin->plugin->instantiation_failed)
return;
#if 0
g_debug ("%s: %s: %s (%d)",
__func__,
lv2_plugin->plugin->setting->descr->name,
port->id.sym,
port->lilv_port_index);
#endif
char buf[sizeof(Lv2ControlChange) +
sizeof(float)];

4
src/zrythm_app.c

@ -2044,7 +2044,9 @@ zrythm_app_init ( @@ -2044,7 +2044,9 @@ zrythm_app_init (
ZrythmApp * self)
{
gdk_set_allowed_backends (
"quartz,win32,wayland,x11,*");
/* prefer X11 - plugin UIs won't work
* otherwise */
"quartz,win32,x11,wayland,*");
const GActionEntry entries[] = {
{ "prompt_for_project", on_prompt_for_project },

2
tools/meson.build

@ -78,6 +78,7 @@ if jq.found () @@ -78,6 +78,7 @@ if jq.found ()
cppcheck_targets += custom_target (
name,
output: name,
depends: [ config_h_vcs ],
command: [
cppcheck,
'--project=' + meson_build_root / 'compile_commands.json',
@ -96,6 +97,7 @@ if jq.found () @@ -96,6 +97,7 @@ if jq.found ()
clang_tidy_targets += custom_target (
name,
output: name,
depends: [ config_h_vcs ],
command: [
run_clang_tidy, clang_tidy.full_path (),
meson_build_root, '@PRIVATE_DIR@',

8
tools/stoat_suppressions.txt

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
control_port_set_val.* ==> track_set_muted
control_port_set_val.* ==> track_set_muted
.* ==> _backtrace_get
.* ==> g_return_if_fail_warning
mpmc_queue_push_back ==> g_log
port_get_.*_index ==> g_log_structured_standard
port_get_.*_index ==> g_log
port_get_full_designation ==> g_log

6
tools/stoat_whitelist.txt

@ -1,2 +1,4 @@ @@ -1,2 +1,4 @@
g_log
g_warn_message
jack_port_connected
g_thread_self
g_strcmp0
qsort

Loading…
Cancel
Save