[SCM] gsequencer/master: add patch to ignore playback as no soundcard configured

jkraehemann-guest at users.alioth.debian.org jkraehemann-guest at users.alioth.debian.org
Mon Mar 20 18:55:30 UTC 2017


The following commit has been merged in the master branch:
commit e6637ff2e5497825a326e5287091c08018b0c117
Author: Joël Krähemann <jkraehemann-guest at users.alioth.debian.org>
Date:   Mon Mar 20 19:55:12 2017 +0100

    add patch to ignore playback as no soundcard configured

diff --git a/debian/patches/fix-crash-as-no-soundcard.diff b/debian/patches/fix-crash-as-no-soundcard.diff
new file mode 100644
index 0000000..7d8dad0
--- /dev/null
+++ b/debian/patches/fix-crash-as-no-soundcard.diff
@@ -0,0 +1,269 @@
+--- a/ags/X/ags_machine.c
++++ b/ags/X/ags_machine.c
+@@ -1503,6 +1503,8 @@
+   AgsTaskThread *task_thread;
+ 
+   AgsApplicationContext *application_context;
++
++  gboolean no_soundcard;
+   
+   pthread_mutex_t *application_mutex;
+   pthread_mutex_t *audio_loop_mutex;
+@@ -1513,6 +1515,21 @@
+ 
+   mutex_manager = ags_mutex_manager_get_instance();
+   application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
++
++  /* check if soundcard present */
++  no_soundcard = FALSE;
++
++  pthread_mutex_lock(application_mutex);
++
++  if(ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context)) == NULL){
++    no_soundcard = TRUE;
++  }
++  
++  pthread_mutex_unlock(application_mutex);
++
++  if(no_soundard){
++    return;
++  }
+   
+   /* get threads */
+   pthread_mutex_lock(application_mutex);
+--- a/ags/X/ags_pad.c
++++ b/ags/X/ags_pad.c
+@@ -30,6 +30,7 @@
+ #include <ags/thread/ags_task_thread.h>
+ #include <ags/thread/ags_task_completion.h>
+ 
++#include <ags/audio/ags_sound_provider.h>
+ #include <ags/audio/ags_audio.h>
+ #include <ags/audio/ags_input.h>
+ #include <ags/audio/ags_output.h>
+@@ -770,6 +771,7 @@
+   
+   GList *tasks;
+ 
++  gboolean no_soundcard;
+   gboolean play_all;
+ 
+   pthread_mutex_t *application_mutex;
+@@ -783,7 +785,22 @@
+   
+   mutex_manager = ags_mutex_manager_get_instance();
+   application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
++
++  /* check if soundcard present */
++  no_soundcard = FALSE;
++
++  pthread_mutex_lock(application_mutex);
++
++  if(ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context)) == NULL){
++    no_soundcard = TRUE;
++  }
+   
++  pthread_mutex_unlock(application_mutex);
++
++  if(no_soundard){
++    return;
++  }
++
+   /* get audio loop */
+   pthread_mutex_lock(application_mutex);
+ 
+--- a/ags/X/editor/ags_note_edit_callbacks.c
++++ b/ags/X/editor/ags_note_edit_callbacks.c
+@@ -27,6 +27,7 @@
+ #include <ags/thread/ags_mutex_manager.h>
+ #include <ags/thread/ags_task_thread.h>
+ 
++#include <ags/audio/ags_sound_provider.h>
+ #include <ags/audio/ags_audio.h>
+ #include <ags/audio/ags_channel.h>
+ #include <ags/audio/ags_output.h>
+@@ -46,6 +47,7 @@
+ #include <ags/audio/task/ags_append_recall.h>
+ #include <ags/audio/task/ags_add_audio_signal.h>
+ 
++#include <ags/X/ags_window.h>
+ #include <ags/X/ags_editor.h>
+ 
+ #include <ags/X/machine/ags_panel.h>
+@@ -1210,6 +1212,8 @@
+   auto void ags_note_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel, AgsNote *note);
+ 
+   void ags_note_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel, AgsNote *note){
++    AgsWindow *window;
++    
+     GObject *soundcard;
+     AgsAudio *audio;
+ 
+@@ -1226,14 +1230,35 @@
+     
+     GList *tasks;
+ 
++    gboolean no_soundcard;
++    
+     pthread_mutex_t *application_mutex;
+     pthread_mutex_t *soundcard_mutex;
+     pthread_mutex_t *audio_mutex;
+     pthread_mutex_t *channel_mutex;
+ 
++    window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) pattern_edit);
++
++    application_context = (AgsApplicationContext *) window->application_context;
++
+     mutex_manager = ags_mutex_manager_get_instance();
+     application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
+ 
++    /* check if soundcard present */
++    no_soundcard = FALSE;
++
++    pthread_mutex_lock(application_mutex);
++
++    if(ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context)) == NULL){
++      no_soundcard = TRUE;
++    }
++  
++    pthread_mutex_unlock(application_mutex);
++
++    if(no_soundard){
++      return;
++    }
++
+     /* lookup channel mutex */
+     pthread_mutex_lock(application_mutex);
+   
+@@ -1272,13 +1297,6 @@
+ 
+     pthread_mutex_unlock(application_mutex);
+ 
+-    /* get application_context */
+-    pthread_mutex_lock(soundcard_mutex);
+-
+-    application_context = (AgsApplicationContext *) ags_soundcard_get_application_context(AGS_SOUNDCARD(soundcard));
+-
+-    pthread_mutex_unlock(soundcard_mutex);
+-
+     /* get threads */
+     pthread_mutex_lock(application_mutex);
+ 
+--- a/ags/X/editor/ags_pattern_edit_callbacks.c
++++ b/ags/X/editor/ags_pattern_edit_callbacks.c
+@@ -27,6 +27,7 @@
+ #include <ags/thread/ags_mutex_manager.h>
+ #include <ags/thread/ags_task_thread.h>
+ 
++#include <ags/audio/ags_sound_provider.h>
+ #include <ags/audio/ags_audio.h>
+ #include <ags/audio/ags_channel.h>
+ #include <ags/audio/ags_output.h>
+@@ -44,6 +45,7 @@
+ #include <ags/audio/task/ags_append_recall.h>
+ #include <ags/audio/task/ags_add_audio_signal.h>
+ 
++#include <ags/X/ags_window.h>
+ #include <ags/X/ags_editor.h>
+ 
+ #include <ags/X/machine/ags_panel.h>
+@@ -1154,6 +1156,8 @@
+   auto void ags_pattern_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel);
+ 
+   void ags_pattern_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel){
++    AgsWindow *window;
++   
+     GObject *soundcard;
+     AgsAudio *audio;
+ 
+@@ -1171,14 +1175,35 @@
+     
+     GList *tasks;
+ 
++    gboolean no_soundcard;
++
+     pthread_mutex_t *application_mutex;
+     pthread_mutex_t *soundcard_mutex;
+     pthread_mutex_t *audio_mutex;
+     pthread_mutex_t *channel_mutex;
+ 
++    window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) pattern_edit);
++
++    application_context = (AgsApplicationContext *) window->application_context;
++
+     mutex_manager = ags_mutex_manager_get_instance();
+     application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
+ 
++    /* check if soundcard present */
++    no_soundcard = FALSE;
++
++    pthread_mutex_lock(application_mutex);
++
++    if(ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context)) == NULL){
++      no_soundcard = TRUE;
++    }
++  
++    pthread_mutex_unlock(application_mutex);
++
++    if(no_soundard){
++      return;
++    }
++    
+     /* lookup channel mutex */
+     pthread_mutex_lock(application_mutex);
+   
+@@ -1217,13 +1242,6 @@
+   
+     pthread_mutex_unlock(application_mutex);
+ 
+-    /* get application_context */
+-    pthread_mutex_lock(soundcard_mutex);
+-
+-    application_context = (AgsApplicationContext *) ags_soundcard_get_application_context(AGS_SOUNDCARD(soundcard));
+-
+-    pthread_mutex_unlock(soundcard_mutex);
+-
+     /* get threads */
+     pthread_mutex_lock(application_mutex);
+ 
+--- a/ags/X/machine/ags_cell_pattern_callbacks.c
++++ b/ags/X/machine/ags_cell_pattern_callbacks.c
+@@ -26,6 +26,7 @@
+ #include <ags/thread/ags_mutex_manager.h>
+ #include <ags/thread/ags_task_thread.h>
+ 
++#include <ags/audio/ags_sound_provider.h>
+ #include <ags/audio/ags_playback.h>
+ 
+ #include <ags/audio/thread/ags_audio_loop.h>
+@@ -208,6 +209,8 @@
+     
+     GList *tasks;
+ 
++    gboolean no_soundcard;
++    
+     pthread_mutex_t *application_mutex;
+     pthread_mutex_t *audio_mutex;
+     pthread_mutex_t *channel_mutex;
+@@ -217,6 +220,21 @@
+     mutex_manager = ags_mutex_manager_get_instance();
+     application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
+ 
++    /* check if soundcard present */
++    no_soundcard = FALSE;
++
++    pthread_mutex_lock(application_mutex);
++
++    if(ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context)) == NULL){
++      no_soundcard = TRUE;
++    }
++  
++    pthread_mutex_unlock(application_mutex);
++
++    if(no_soundard){
++      return;
++    }
++
+     /* lookup channel mutex */
+     pthread_mutex_lock(application_mutex);
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 4d511d0..aedefc4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -20,3 +20,4 @@ fix-missing-midi-connection-dialog.diff
 fix-leak-while-g-timeout-function.diff
 fix-gparamspec-mixed.diff
 fix-makefile-am-linker.diff
+fix-crash-as-no-soundcard.diff

-- 
gsequencer packaging



More information about the pkg-multimedia-commits mailing list