From 91f7d4d34a28b00a26292fa9498f0d4f78a5dfb7 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 25 Nov 2019 10:13:29 +0100 Subject: [PATCH] Bug fix: cdrskin multi-track burning was slow and stalled after track 1. Regression introduced in version 1.5.0 by commit 84fad99, 2018.02.05 --- cdrskin/cdrfifo.c | 15 ++++++++++++++- cdrskin/cdrskin_timestamp.h | 2 +- configure.ac | 7 ++++--- libburn/sg-linux.c | 9 +++++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cdrskin/cdrfifo.c b/cdrskin/cdrfifo.c index 26d28db..19f727d 100644 --- a/cdrskin/cdrfifo.c +++ b/cdrskin/cdrfifo.c @@ -28,7 +28,20 @@ #ifndef Cdrfifo_standalonE /* for burn_os_alloc_buffer() */ #include "../libburn/libburn.h" -#define Libburn_has_open_trac_srC 1 + +/* ts B91124: + DISABLED, because this spoils multi-track burning by slowing down first + track and stalling before the second track begins. Obviously a problem + with chained input and waiting for full O_DRIECT suitable read chunks. + DO NOT ENABLE before the wait code in this source file is fixed. + That long, ./configure option --enable-track-src-odirect must not + get into effect in libburn. NO -DLibburn_read_o_direcT either. + + For extra safety, O_DIRECT has been banned in libburn/sg-linux.c too. + + # def ine Libburn_has_open_trac_srC 1 +*/ + #endif #include "cdrfifo.h" diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index d8f7791..8b57c2b 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2019.10.28.155736" +#define Cdrskin_timestamP "2019.11.25.091234" diff --git a/configure.ac b/configure.ac index 9b019fd..d549c11 100644 --- a/configure.ac +++ b/configure.ac @@ -218,11 +218,12 @@ CFLAGS="$STATVFS_DEF $CFLAGS" dnl ts A91122 AC_ARG_ENABLE(track-src-odirect, -[ --enable-track-src-odirect Enable use of O_DIRECT with track input, default=no], +[ --enable-track-src-odirect Banned for now: (Enable use of O_DIRECT with track input, default=no)], , enable_track_src_odirect=no) if test x$enable_track_src_odirect = xyes; then - LIBBURN_O_DIRECT_DEF="-DLibburn_read_o_direcT" - echo "enabled use of O_DIRECT with track input" +# LIBBURN_O_DIRECT_DEF="-DLibburn_read_o_direcT" +# echo "enabled use of O_DIRECT with track input" + echo "REFUSED to enable use of O_DIRECT with track input because of cdrskin multi-track bug" else LIBBURN_O_DIRECT_DEF= echo "disabled use of O_DIRECT with track input" diff --git a/libburn/sg-linux.c b/libburn/sg-linux.c index abd19da..8c371d1 100644 --- a/libburn/sg-linux.c +++ b/libburn/sg-linux.c @@ -111,6 +111,15 @@ Hint: You should also look into sg-freebsd-port.c, which is a younger and /** PORTING : ------- OS dependent headers and definitions ------ */ +#ifdef Libburn_read_o_direcT +/* ts B91124: + DISABLED, because this spoils multi-track burning of cdrskin by a hard to + fix bug in cdrskin/cdrfifo.c + DO NOT ENABLE before the wait code in that source file is fixed. +*/ +#undef Libburn_read_o_direcT +#endif + #ifdef Libburn_read_o_direcT # ifndef _GNU_SOURCE