[SCM] gsequencer/master: merged patches related to Bug#857947
jkraehemann-guest at users.alioth.debian.org
jkraehemann-guest at users.alioth.debian.org
Thu Mar 16 16:06:27 UTC 2017
The following commit has been merged in the master branch:
commit 54bb55b92f1b73a7a3ba3f8b5860e1d7e8c64762
Author: Joël Krähemann <jkraehemann-guest at users.alioth.debian.org>
Date: Thu Mar 16 17:00:06 2017 +0100
merged patches related to Bug#857947
diff --git a/debian/patches/fix-clear-buffer-h.patch b/debian/patches/fix-clear-buffer-h.patch
deleted file mode 100644
index 52c3d49..0000000
--- a/debian/patches/fix-clear-buffer-h.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Description: AgsClearBuffer fixes data-race causing distorted audio output
- resulting in useless audio output. Introduced due to low-latency sync
- strategy for ALSA audio output and alsa MIDI input. Might end in application
- crash and is required by immediate sync strategy. This patch includes the
- header file of the task clearing soundcard buffers in order you can do
- additive mixing, during ordinary run context.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- /dev/null
-+++ b/ags/audio/task/ags_clear_buffer.h
-@@ -0,0 +1,54 @@
-+/* GSequencer - Advanced GTK Sequencer
-+ * Copyright (C) 2005-2015 Joël Krähemann
-+ *
-+ * This file is part of GSequencer.
-+ *
-+ * GSequencer is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * GSequencer is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with GSequencer. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef __AGS_CLEAR_BUFFER_H__
-+#define __AGS_CLEAR_BUFFER_H__
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+#include <ags/thread/ags_task.h>
-+
-+#define AGS_TYPE_CLEAR_BUFFER (ags_clear_buffer_get_type())
-+#define AGS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBuffer))
-+#define AGS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
-+#define AGS_IS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CLEAR_BUFFER))
-+#define AGS_IS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CLEAR_BUFFER))
-+#define AGS_CLEAR_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
-+
-+typedef struct _AgsClearBuffer AgsClearBuffer;
-+typedef struct _AgsClearBufferClass AgsClearBufferClass;
-+
-+struct _AgsClearBuffer
-+{
-+ AgsTask task;
-+
-+ GObject *device;
-+};
-+
-+struct _AgsClearBufferClass
-+{
-+ AgsTaskClass task;
-+};
-+
-+GType ags_clear_buffer_get_type();
-+
-+AgsClearBuffer* ags_clear_buffer_new(GObject *device);
-+
-+#endif /*__AGS_CLEAR_BUFFER_H__*/
diff --git a/debian/patches/fix-devout.patch b/debian/patches/fix-devout.patch
deleted file mode 100644
index cdb0ac4..0000000
--- a/debian/patches/fix-devout.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Description: AgsClearBuffer fixes data-race causing distorted audio output
- resulting in useless audio output. Introduced due to low-latency sync
- strategy for ALSA audio output and alsa MIDI input. Might end in application
- crash and is required by immediate sync strategy.
- These changes make use of the task by ags_devout_alsa_play() and
- ags_devout_oss_play().
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/ags/audio/ags_devout.c
-+++ b/ags/audio/ags_devout.c
-@@ -33,6 +33,7 @@
- #include <ags/thread/ags_poll_fd.h>
-
- #include <ags/audio/task/ags_tic_device.h>
-+#include <ags/audio/task/ags_clear_buffer.h>
- #include <ags/audio/task/ags_switch_buffer_flag.h>
- #include <ags/audio/task/ags_notify_soundcard.h>
-
-@@ -2210,6 +2211,7 @@
- AgsDevout *devout;
-
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- AgsThread *task_thread;
-@@ -2402,9 +2404,6 @@
- nth_ring_buffer = 1;
- }
-
-- /* clear next buffer */
-- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
--
- #ifdef AGS_WITH_OSS
- /* fill ring buffer */
- ags_devout_oss_play_fill_ring_buffer(devout->buffer[nth_buffer],
-@@ -2434,6 +2433,11 @@
- tic_device = ags_tic_device_new((GObject *) devout);
- task = g_list_append(task,
- tic_device);
-+
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
-@@ -2951,6 +2955,7 @@
- AgsDevout *devout;
-
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- AgsThread *task_thread;
-@@ -3166,9 +3171,6 @@
- nth_ring_buffer = 1;
- }
-
-- /* clear next buffer */
-- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
--
- #ifdef AGS_WITH_ALSA
-
- /* fill ring buffer */
-@@ -3227,6 +3229,11 @@
- tic_device = ags_tic_device_new((GObject *) devout);
- task = g_list_append(task,
- tic_device);
-+
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
diff --git a/debian/patches/fix-jack-client.patch b/debian/patches/fix-jack-client.patch
deleted file mode 100644
index 7c4ddad..0000000
--- a/debian/patches/fix-jack-client.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Description: This fix eliminates clearing buffer by memset(). The AgsClearBuffer
- task is used instead in ags_jack_devout.c. Related to data-race and concurrent
- access causing possible SIGINT.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/ags/audio/jack/ags_jack_client.c
-+++ b/ags/audio/jack/ags_jack_client.c
-@@ -886,8 +886,6 @@
- }
-
- if(!no_event){
-- memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
--
- /* signal finish */
- pthread_mutex_lock(device_mutex);
-
diff --git a/debian/patches/fix-jack-devout.patch b/debian/patches/fix-jack-devout.patch
deleted file mode 100644
index 60974ea..0000000
--- a/debian/patches/fix-jack-devout.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-Description: AgsClearBuffer fixes data-race causing distorted audio output
- resulting in useless audio output. Introduced due to low-latency sync
- strategy for ALSA audio output and alsa MIDI input. Might end in application
- crash and is required by immediate sync strategy.
- These changes make use of the task by ags_jack_devout_port_play().
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/ags/audio/jack/ags_jack_devout.c
-+++ b/ags/audio/jack/ags_jack_devout.c
-@@ -40,6 +40,7 @@
-
- #include <ags/audio/task/ags_notify_soundcard.h>
- #include <ags/audio/task/ags_tic_device.h>
-+#include <ags/audio/task/ags_clear_buffer.h>
- #include <ags/audio/task/ags_switch_buffer_flag.h>
-
- #include <ags/audio/thread/ags_audio_loop.h>
-@@ -1609,7 +1610,7 @@
- {
- AgsJackClient *jack_client;
- AgsJackDevout *jack_devout;
--
-+
- AgsMutexManager *mutex_manager;
- AgsTaskThread *task_thread;
-
-@@ -1728,6 +1729,7 @@
-
- if(task_thread != NULL){
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- GList *task;
-@@ -1738,7 +1740,12 @@
- tic_device = ags_tic_device_new((GObject *) jack_devout);
- task = g_list_append(task,
- tic_device);
--
-+
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) jack_devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-+
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) jack_devout);
- task = g_list_append(task,
-@@ -1748,9 +1755,57 @@
- ags_task_thread_append_tasks((AgsTaskThread *) task_thread,
- task);
- }else{
-+ guint nth_buffer;
-+ guint word_size;
-+
- /* tic */
- ags_soundcard_tic(AGS_SOUNDCARD(jack_devout));
--
-+
-+ switch(jack_devout->format){
-+ case AGS_SOUNDCARD_SIGNED_8_BIT:
-+ {
-+ word_size = sizeof(signed char);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_16_BIT:
-+ {
-+ word_size = sizeof(signed short);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_24_BIT:
-+ {
-+ //NOTE:JK: The 24-bit linear samples use 32-bit physical space
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_32_BIT:
-+ {
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_64_BIT:
-+ {
-+ word_size = sizeof(signed long long);
-+ }
-+ break;
-+ default:
-+ g_warning("ags_jack_devout_port_play(): unsupported word size\0");
-+ return;
-+ }
-+
-+ /* reset - clear buffer */
-+ if((AGS_JACK_DEVOUT_BUFFER0 & (jack_devout->flags)) != 0){
-+ nth_buffer = 3;
-+ }else if((AGS_JACK_DEVOUT_BUFFER1 & (jack_devout->flags)) != 0){
-+ nth_buffer = 0;
-+ }else if((AGS_JACK_DEVOUT_BUFFER2 & (jack_devout->flags)) != 0){
-+ nth_buffer = 1;
-+ }else if((AGS_JACK_DEVOUT_BUFFER3 & jack_devout->flags) != 0){
-+ nth_buffer = 2;
-+ }
-+
-+ memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
-+
- /* reset - switch buffer flags */
- ags_jack_devout_switch_buffer_flag(jack_devout);
- }
diff --git a/debian/patches/fix-clear-buffer-c.patch b/debian/patches/fix-soundcard-data-race.diff
similarity index 58%
rename from debian/patches/fix-clear-buffer-c.patch
rename to debian/patches/fix-soundcard-data-race.diff
index 263498c..e2396a8 100644
--- a/debian/patches/fix-clear-buffer-c.patch
+++ b/debian/patches/fix-soundcard-data-race.diff
@@ -1,12 +1,3 @@
-Description: AgsClearBuffer fixes data-race causing distorted audio output
- resulting in useless audio output. Introduced due to low-latency sync
- strategy for ALSA audio output and alsa MIDI input. Might end in application
- crash and is required by immediate sync strategy. This patch includes the
- c-source file of the task clearing soundcard buffers in order you can do
- additive mixing, during ordinary run context.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
--- /dev/null
+++ b/ags/audio/task/ags_clear_buffer.c
@@ -0,0 +1,379 @@
@@ -389,3 +380,241 @@ Last-Update: 2017-01-31
+
+ return(clear_buffer);
+}
+--- /dev/null
++++ b/ags/audio/task/ags_clear_buffer.h
+@@ -0,0 +1,54 @@
++/* GSequencer - Advanced GTK Sequencer
++ * Copyright (C) 2005-2015 Joël Krähemann
++ *
++ * This file is part of GSequencer.
++ *
++ * GSequencer is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 3 of the License, or
++ * (at your option) any later version.
++ *
++ * GSequencer is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with GSequencer. If not, see <http://www.gnu.org/licenses/>.
++ */
++
++#ifndef __AGS_CLEAR_BUFFER_H__
++#define __AGS_CLEAR_BUFFER_H__
++
++#include <glib.h>
++#include <glib-object.h>
++
++#include <ags/thread/ags_task.h>
++
++#define AGS_TYPE_CLEAR_BUFFER (ags_clear_buffer_get_type())
++#define AGS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBuffer))
++#define AGS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
++#define AGS_IS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CLEAR_BUFFER))
++#define AGS_IS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CLEAR_BUFFER))
++#define AGS_CLEAR_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
++
++typedef struct _AgsClearBuffer AgsClearBuffer;
++typedef struct _AgsClearBufferClass AgsClearBufferClass;
++
++struct _AgsClearBuffer
++{
++ AgsTask task;
++
++ GObject *device;
++};
++
++struct _AgsClearBufferClass
++{
++ AgsTaskClass task;
++};
++
++GType ags_clear_buffer_get_type();
++
++AgsClearBuffer* ags_clear_buffer_new(GObject *device);
++
++#endif /*__AGS_CLEAR_BUFFER_H__*/
+--- a/ags/audio/ags_devout.c
++++ b/ags/audio/ags_devout.c
+@@ -33,6 +33,7 @@
+ #include <ags/thread/ags_poll_fd.h>
+
+ #include <ags/audio/task/ags_tic_device.h>
++#include <ags/audio/task/ags_clear_buffer.h>
+ #include <ags/audio/task/ags_switch_buffer_flag.h>
+ #include <ags/audio/task/ags_notify_soundcard.h>
+
+@@ -2210,6 +2211,7 @@
+ AgsDevout *devout;
+
+ AgsTicDevice *tic_device;
++ AgsClearBuffer *clear_buffer;
+ AgsSwitchBufferFlag *switch_buffer_flag;
+
+ AgsThread *task_thread;
+@@ -2402,9 +2404,6 @@
+ nth_ring_buffer = 1;
+ }
+
+- /* clear next buffer */
+- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
+-
+ #ifdef AGS_WITH_OSS
+ /* fill ring buffer */
+ ags_devout_oss_play_fill_ring_buffer(devout->buffer[nth_buffer],
+@@ -2434,6 +2433,11 @@
+ tic_device = ags_tic_device_new((GObject *) devout);
+ task = g_list_append(task,
+ tic_device);
++
++ /* reset - clear buffer */
++ clear_buffer = ags_clear_buffer_new((GObject *) devout);
++ task = g_list_append(task,
++ clear_buffer);
+
+ /* reset - switch buffer flags */
+ switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
+@@ -2951,6 +2955,7 @@
+ AgsDevout *devout;
+
+ AgsTicDevice *tic_device;
++ AgsClearBuffer *clear_buffer;
+ AgsSwitchBufferFlag *switch_buffer_flag;
+
+ AgsThread *task_thread;
+@@ -3166,9 +3171,6 @@
+ nth_ring_buffer = 1;
+ }
+
+- /* clear next buffer */
+- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
+-
+ #ifdef AGS_WITH_ALSA
+
+ /* fill ring buffer */
+@@ -3227,6 +3229,11 @@
+ tic_device = ags_tic_device_new((GObject *) devout);
+ task = g_list_append(task,
+ tic_device);
++
++ /* reset - clear buffer */
++ clear_buffer = ags_clear_buffer_new((GObject *) devout);
++ task = g_list_append(task,
++ clear_buffer);
+
+ /* reset - switch buffer flags */
+ switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
+--- a/ags/audio/jack/ags_jack_client.c
++++ b/ags/audio/jack/ags_jack_client.c
+@@ -886,8 +886,6 @@
+ }
+
+ if(!no_event){
+- memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
+-
+ /* signal finish */
+ pthread_mutex_lock(device_mutex);
+
+--- a/ags/audio/jack/ags_jack_devout.c
++++ b/ags/audio/jack/ags_jack_devout.c
+@@ -40,6 +40,7 @@
+
+ #include <ags/audio/task/ags_notify_soundcard.h>
+ #include <ags/audio/task/ags_tic_device.h>
++#include <ags/audio/task/ags_clear_buffer.h>
+ #include <ags/audio/task/ags_switch_buffer_flag.h>
+
+ #include <ags/audio/thread/ags_audio_loop.h>
+@@ -1609,7 +1610,7 @@
+ {
+ AgsJackClient *jack_client;
+ AgsJackDevout *jack_devout;
+-
++
+ AgsMutexManager *mutex_manager;
+ AgsTaskThread *task_thread;
+
+@@ -1728,6 +1729,7 @@
+
+ if(task_thread != NULL){
+ AgsTicDevice *tic_device;
++ AgsClearBuffer *clear_buffer;
+ AgsSwitchBufferFlag *switch_buffer_flag;
+
+ GList *task;
+@@ -1738,7 +1740,12 @@
+ tic_device = ags_tic_device_new((GObject *) jack_devout);
+ task = g_list_append(task,
+ tic_device);
+-
++
++ /* reset - clear buffer */
++ clear_buffer = ags_clear_buffer_new((GObject *) jack_devout);
++ task = g_list_append(task,
++ clear_buffer);
++
+ /* reset - switch buffer flags */
+ switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) jack_devout);
+ task = g_list_append(task,
+@@ -1748,9 +1755,57 @@
+ ags_task_thread_append_tasks((AgsTaskThread *) task_thread,
+ task);
+ }else{
++ guint nth_buffer;
++ guint word_size;
++
+ /* tic */
+ ags_soundcard_tic(AGS_SOUNDCARD(jack_devout));
+-
++
++ switch(jack_devout->format){
++ case AGS_SOUNDCARD_SIGNED_8_BIT:
++ {
++ word_size = sizeof(signed char);
++ }
++ break;
++ case AGS_SOUNDCARD_SIGNED_16_BIT:
++ {
++ word_size = sizeof(signed short);
++ }
++ break;
++ case AGS_SOUNDCARD_SIGNED_24_BIT:
++ {
++ //NOTE:JK: The 24-bit linear samples use 32-bit physical space
++ word_size = sizeof(signed long);
++ }
++ break;
++ case AGS_SOUNDCARD_SIGNED_32_BIT:
++ {
++ word_size = sizeof(signed long);
++ }
++ break;
++ case AGS_SOUNDCARD_SIGNED_64_BIT:
++ {
++ word_size = sizeof(signed long long);
++ }
++ break;
++ default:
++ g_warning("ags_jack_devout_port_play(): unsupported word size\0");
++ return;
++ }
++
++ /* reset - clear buffer */
++ if((AGS_JACK_DEVOUT_BUFFER0 & (jack_devout->flags)) != 0){
++ nth_buffer = 3;
++ }else if((AGS_JACK_DEVOUT_BUFFER1 & (jack_devout->flags)) != 0){
++ nth_buffer = 0;
++ }else if((AGS_JACK_DEVOUT_BUFFER2 & (jack_devout->flags)) != 0){
++ nth_buffer = 1;
++ }else if((AGS_JACK_DEVOUT_BUFFER3 & jack_devout->flags) != 0){
++ nth_buffer = 2;
++ }
++
++ memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
++
+ /* reset - switch buffer flags */
+ ags_jack_devout_switch_buffer_flag(jack_devout);
+ }
diff --git a/debian/patches/series b/debian/patches/series
index 2580cd0..710fa8b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -11,12 +11,8 @@ fix-makefile-am.patch
fix-machine-selector.patch
fix-pad-callbacks.patch
fix-export-soundcard-callbacks.patch
-fix-jack-devout.patch
-fix-jack-client.patch
fix-missing-mutices.diff
-fix-clear-buffer-h.patch
-fix-clear-buffer-c.patch
-fix-devout.patch
+fix-soundcard-data-race.diff
fix-thread-posix.patch
fix-duplicated-flag-definition.diff
fix-null-pointer-dereference.diff
--
gsequencer packaging
More information about the pkg-multimedia-commits
mailing list