View Issue Details

IDProjectCategoryView StatusLast Update
0010101ardourbugspublic2026-01-03 21:47
Reporterpatrigirane Assigned To 
PrioritynormalSeveritymajorReproducibilityalways
Status newResolutionopen 
PlatformUbuntuOSLinuxOS Version(any)
Product Version9.0-rc 
Summary0010101: Ardour crash during audio region deletion
DescriptionArdour crashes with an assertion failure in Playlist::relayer() when deleting a split audio region. The crash occurs due to floating-point precision errors when calculating division boundaries for region layering. When a region's position falls exactly at the playlist's end boundary, start_division can equal divisions, triggering the assertion start_division >= 0 && end_division >= start_division.
Steps To Reproduce1. Create an audio track with a region
2. Split the region
3. Delete one of the split regions
4. Crash occurs during playlist relayering
Additional InformationBacktrace:
#0 __pthread_kill_implementation
0000001 raise
#2 abort
#3 Playlist::relayer() at playlist.cc:2667
    assertion failed: (divisions == 0 || (start_division >= 0 && end_division >= start_division))

I tried fixing it by clamping both `start_division` and `end_division` using std::min() to ensure they never exceed `divisions - 1`:
From dcf206e0b3

diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index 5de65a1af2..45dfc7ef00 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -2660,11 +2660,8 @@ Playlist::relayer ()
         int end_division = 0;
 
         if (division_size > 0) {
- start_division = start.distance (r->position ()).samples () / division_size;
- end_division = start.distance (r->position () + r->length ()).samples () / division_size;
- if (end_division == divisions) {
- end_division--;
- }
+ start_division = std::min ((int) (start.distance (r->position ()).samples () / division_size), divisions - 1);
+ end_division = std::min ((int) (start.distance (r->position () + r->length ()).samples () / division_size), divisions - 1);
         }
 
         assert (divisions == 0 || end_division < divisions);
TagsNo tags attached.

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2026-01-03 21:47 patrigirane New Issue