[SCM] gsequencer/master: fixed reference count

jkraehemann-guest at users.alioth.debian.org jkraehemann-guest at users.alioth.debian.org
Fri Mar 17 11:32:33 UTC 2017


The following commit has been merged in the master branch:
commit 01597b9c9a05a8308f5daa4153967a586ec19ec8
Author: Joël Krähemann <jkraehemann-guest at users.alioth.debian.org>
Date:   Fri Mar 17 00:24:09 2017 +0100

    fixed reference count

diff --git a/debian/patches/fix-missing-dispose.diff b/debian/patches/fix-missing-dispose.diff
index bb4c78e..53bec93 100644
--- a/debian/patches/fix-missing-dispose.diff
+++ b/debian/patches/fix-missing-dispose.diff
@@ -1624,7 +1624,196 @@
  }
  
  void
-@@ -146,17 +217,295 @@
+@@ -108,9 +179,120 @@
+ void
+ ags_playback_init(AgsPlayback *playback)
+ {
++  AgsConfig *config;
++
++  gchar *str, *str0, *str1;
++
++  gdouble freq;
++  guint samplerate, buffer_size;
++  gboolean super_threaded_channel, super_threaded_recycling;
++  
++  /* config */
++  config = ags_config_get_instance();
++
++  /* thread model */
++  str0 = ags_config_get_value(config,
++			      AGS_CONFIG_THREAD,
++			      "model\0");
++  str1 = ags_config_get_value(config,
++			      AGS_CONFIG_THREAD,
++			      "super-threaded-scope\0");
++
++  if(str0 != NULL && str1 != NULL){
++    if(!g_ascii_strncasecmp(str0,
++			    "super-threaded\0",
++			    15)){
++      if(!g_ascii_strncasecmp(str1,
++			      "channel\0",
++			      8)){
++	super_threaded_channel = TRUE;
++      }else if(!g_ascii_strncasecmp(str1,
++				    "recycling\0",
++				    10)){
++	super_threaded_recycling = TRUE;
++      }
++    }
++  }
++
++  if(str0 != NULL){
++    free(str0);
++  }
++
++  if(str1 != NULL){
++    free(str1);
++  }
++
+   /* default flags */
+-  g_atomic_int_set(&(playback->flags),
+-		   AGS_PLAYBACK_SUPER_THREADED_CHANNEL);
++  if(super_threaded_channel ||
++     super_threaded_recycling){
++    g_atomic_int_set(&(playback->flags),
++		     AGS_PLAYBACK_SUPER_THREADED_CHANNEL);
++
++    if(super_threaded_recycling){
++      g_atomic_int_or(&(playback->flags),
++		      AGS_PLAYBACK_SUPER_THREADED_RECYCLING);
++    }
++  }else{
++    g_atomic_int_set(&(playback->flags),
++		     0);
++  }
++
++  /* source */
++  playback->source = NULL;
++  playback->audio_channel = 0;
++
++  /* samplerate and buffer size */
++  samplerate = AGS_SOUNDCARD_DEFAULT_SAMPLERATE;
++  buffer_size = AGS_SOUNDCARD_DEFAULT_BUFFER_SIZE;
++
++  /* samplerate */
++  str = ags_config_get_value(config,
++			     AGS_CONFIG_SOUNDCARD,
++			     "samplerate\0");
++
++  if(str == NULL){
++    str = ags_config_get_value(config,
++			       AGS_CONFIG_SOUNDCARD_0,
++			       "samplerate\0");
++  }
++  
++  if(str != NULL){
++    samplerate = g_ascii_strtoull(str,
++				  NULL,
++				  10);
++
++    free(str);
++  }
++
++  /* buffer size */
++  str = ags_config_get_value(config,
++			     AGS_CONFIG_SOUNDCARD,
++			     "buffer-size\0");
++
++  if(str == NULL){
++    str = ags_config_get_value(config,
++			       AGS_CONFIG_SOUNDCARD_0,
++			       "buffer-size\0");
++  }
++  
++  if(str != NULL){
++    buffer_size = g_ascii_strtoull(str,
++				   NULL,
++				   10);
++
++    free(str);
++  }
++
++  /* playback domain */
++  playback->playback_domain = NULL;
++
++  /* source and audio channel */
++  playback->source = NULL;
++
++  playback->audio_channel = 0;
++  
++  /* thread frequency */
++  freq = ceil((gdouble) samplerate / (gdouble) buffer_size) + AGS_SOUNDCARD_DEFAULT_OVERCLOCK;
+ 
+   /* super threaded channel */
+   playback->channel_thread = (AgsThread **) malloc(3 * sizeof(AgsThread *));
+@@ -119,13 +301,34 @@
+   playback->channel_thread[1] = NULL;
+   playback->channel_thread[2] = NULL;
+ 
++  if(super_threaded_channel ||
++     super_threaded_recycling){
++    playback->channel_thread[0] = (AgsThread *) ags_channel_thread_new(NULL,
++								       NULL);
++    playback->channel_thread[0]->freq = freq;
++	
++    playback->channel_thread[1] = (AgsThread *) ags_channel_thread_new(NULL,
++								       NULL);
++    playback->channel_thread[1]->freq = freq;
++
++    playback->channel_thread[2] = (AgsThread *) ags_channel_thread_new(NULL,
++								       NULL);
++    playback->channel_thread[2]->freq = freq;
++  }
++  
+   /* iterator thread */
+   playback->iterator_thread = (AgsIteratorThread **) malloc(3 * sizeof(AgsIteratorThread *));
+ 
+-  playback->iterator_thread[0] = ags_iterator_thread_new();
+-  playback->iterator_thread[1] = ags_iterator_thread_new();
+-  playback->iterator_thread[2] = ags_iterator_thread_new();
+-
++  playback->iterator_thread[0] = NULL;
++  playback->iterator_thread[1] = NULL;
++  playback->iterator_thread[2] = NULL;
++
++  if(super_threaded_recycling){
++    playback->iterator_thread[0] = ags_iterator_thread_new();
++    playback->iterator_thread[1] = ags_iterator_thread_new();
++    playback->iterator_thread[2] = ags_iterator_thread_new();
++  }
++  
+   /* super threaded recycling */
+   playback->recycling_thread = (AgsThread **) malloc(3 * sizeof(AgsThread *));
+ 
+@@ -133,11 +336,21 @@
+   playback->recycling_thread[1] = NULL;
+   playback->recycling_thread[2] = NULL;
+ 
+-  /*  */
+-  playback->source = NULL;
+-  playback->audio_channel = 0;
+-
+-  /*  */
++  if(super_threaded_recycling){
++    playback->recycling_thread[0] = (AgsThread *) ags_recycling_thread_new(NULL,
++									   NULL);
++    playback->recycling_thread[0]->freq = freq;
++    
++    playback->recycling_thread[1] = (AgsThread *) ags_recycling_thread_new(NULL,
++									   NULL);
++    playback->recycling_thread[1]->freq = freq;
++
++    playback->recycling_thread[2] = (AgsThread *) ags_recycling_thread_new(NULL,
++									   NULL);  
++    playback->recycling_thread[2]->freq = freq;
++  }
++  
++  /* recall id */
+   playback->recall_id = (AgsRecallID **) malloc(3 * sizeof(AgsRecallID *));
+ 
+   playback->recall_id[0] = NULL;
+@@ -146,17 +359,295 @@
  }
  
  void
@@ -1924,7 +2113,7 @@
  
    /* call parent */
    G_OBJECT_CLASS(ags_playback_parent_class)->finalize(gobject);
-@@ -165,13 +514,250 @@
+@@ -165,13 +656,250 @@
  void
  ags_playback_connect(AgsConnectable *connectable)
  {
@@ -6835,15 +7024,20 @@
    param_spec = g_param_spec_object("peak\0",
  				   "peak of channel\0",
  				   "The peak of channel\0",
-@@ -191,6 +200,7 @@
-   peak_channel->peak->port_value.ags_port_double = FALSE;
+@@ -188,9 +197,11 @@
+ 				     "port-value-size\0", sizeof(gdouble),
+ 				     "port-value-length\0", 1,
+ 				     NULL);
+-  peak_channel->peak->port_value.ags_port_double = FALSE;
++  g_object_ref(peak_channel->peak);
++  peak_channel->peak->port_value.ags_port_double = 0.0;
  
    port = g_list_prepend(port, peak_channel->peak);
 +  g_object_ref(peak_channel->peak);
  
    /* set port */
    AGS_RECALL(peak_channel)->port = port;
-@@ -257,12 +267,31 @@
+@@ -257,12 +268,31 @@
  }
  
  void
@@ -6875,12 +7069,12 @@
    if(peak_channel->peak != NULL){
      g_object_unref(G_OBJECT(peak_channel->peak));
    }
-@@ -329,7 +358,7 @@
+@@ -329,7 +359,7 @@
    guint i;
    guint copy_mode;
    
 -  GValue value = {0,};
-+  GValue *value;
++  GValue value= {0,};
  
    if(peak_channel == NULL){
      return;
@@ -9397,3 +9591,201 @@
  }
  
  void
+--- a/ags/audio/ags_audio.c
++++ b/ags/audio/ags_audio.c
+@@ -958,59 +958,13 @@
+ 
+   /* playback domain */
+   audio->playback_domain = (GObject *) ags_playback_domain_new();
++  g_object_ref(audio->playback_domain);
++  
+   AGS_PLAYBACK_DOMAIN(audio->playback_domain)->domain = (GObject *) audio;
+-
+-  /* thread model */
+-  str0 = ags_config_get_value(config,
+-			      AGS_CONFIG_THREAD,
+-			      "model\0");
+-  str1 = ags_config_get_value(config,
+-			      AGS_CONFIG_THREAD,
+-			      "super-threaded-scope\0");
+-
+-  if(str0 != NULL && str1 != NULL){
+-    if(!g_ascii_strncasecmp(str0,
+-			    "super-threaded\0",
+-			    15)){
+-      if(!g_ascii_strncasecmp(str1,
+-			      "audio\0",
+-			      6) ||
+-	 !g_ascii_strncasecmp(str1,
+-			      "channel\0",
+-			      8) ||
+-	 !g_ascii_strncasecmp(str1,
+-			      "recycling\0",
+-			      10)){
+-	gdouble freq;
+-	
+-	freq = ceil((gdouble) audio->samplerate / (gdouble) audio->buffer_size) + AGS_SOUNDCARD_DEFAULT_OVERCLOCK;
+-	
+-	g_atomic_int_or(&(AGS_PLAYBACK_DOMAIN(audio->playback_domain)->flags),
+-			AGS_PLAYBACK_DOMAIN_SUPER_THREADED_AUDIO);
+-
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[0] = (AgsThread *) ags_audio_thread_new(NULL,
+-													  (GObject *) audio);
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[0]->freq = freq;
+-	
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[1] = (AgsThread *) ags_audio_thread_new(NULL,
+-													  (GObject *) audio);
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[1]->freq = freq;
+-
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[2] = (AgsThread *) ags_audio_thread_new(NULL,
+-													  (GObject *) audio);
+-	AGS_PLAYBACK_DOMAIN(audio->playback_domain)->audio_thread[2]->freq = freq;
+-      }
+-    }
+-  }
++  g_object_set(audio->playback_domain,
++	       "domain\0", audio,
++	       NULL);
+   
+-  if(str0 != NULL){
+-    free(str0);
+-  }
+-
+-  if(str1 != NULL){
+-    free(str1);
+-  }
+-
+   /* notation and automation */
+   audio->notation = NULL;
+   audio->automation = NULL;
+--- a/ags/audio/ags_channel.c
++++ b/ags/audio/ags_channel.c
+@@ -753,66 +753,10 @@
+ 
+   /* playback */
+   channel->playback = (GObject *) ags_playback_new();
+-  AGS_PLAYBACK(channel->playback)->source = (GObject *) channel;
+-
+-  /* thread model */
+-  str0 = ags_config_get_value(config,
+-			      AGS_CONFIG_THREAD,
+-			      "model\0");
+-  str1 = ags_config_get_value(config,
+-			      AGS_CONFIG_THREAD,
+-			      "super-threaded-scope\0");
+-
+-  if(str0 != NULL && str1 != NULL){
+-    if(!g_ascii_strncasecmp(str0,
+-			    "super-threaded\0",
+-			    15)){
+-      if(!g_ascii_strncasecmp(str1,
+-			      "channel\0",
+-			      8) ||
+-	 !g_ascii_strncasecmp(str1,
+-			      "recycling\0",
+-			      10)){
+-	gdouble freq;
+-	
+-	freq = ceil((gdouble) channel->samplerate / (gdouble) channel->buffer_size) + AGS_SOUNDCARD_DEFAULT_OVERCLOCK;
+-
+-	g_atomic_int_or(&(AGS_PLAYBACK(channel->playback)->flags),
+-			AGS_PLAYBACK_SUPER_THREADED_CHANNEL);
+-
+-	AGS_PLAYBACK(channel->playback)->channel_thread[0] = (AgsThread *) ags_channel_thread_new(NULL,
+-												  (GObject *) channel);
+-	AGS_PLAYBACK(channel->playback)->channel_thread[0]->freq = freq;
+-	
+-	AGS_PLAYBACK(channel->playback)->channel_thread[1] = (AgsThread *) ags_channel_thread_new(NULL,
+-												  (GObject *) channel);
+-	AGS_PLAYBACK(channel->playback)->channel_thread[1]->freq = freq;
+-
+-	AGS_PLAYBACK(channel->playback)->channel_thread[2] = (AgsThread *) ags_channel_thread_new(NULL,
+-												  (GObject *) channel);
+-	AGS_PLAYBACK(channel->playback)->channel_thread[2]->freq = freq;
+-	
+-	if(!g_ascii_strncasecmp(str1,
+-				"recycling\0",
+-				10)){
+-	  AGS_PLAYBACK(channel->playback)->recycling_thread[0] = (AgsThread *) ags_recycling_thread_new(NULL,
+-													NULL);
+-	  AGS_PLAYBACK(channel->playback)->recycling_thread[1] = (AgsThread *) ags_recycling_thread_new(NULL,
+-													NULL);
+-	  AGS_PLAYBACK(channel->playback)->recycling_thread[2] = (AgsThread *) ags_recycling_thread_new(NULL,
+-													NULL);
+-	}
+-      }
+-    }
+-  } 
+-
+-  if(str0 != NULL){
+-    free(str0);
+-  }
+-
+-  if(str1 != NULL){
+-    free(str1);
+-  }
++  g_object_ref(channel->playback);
++  g_object_set(channel->playback,
++	       "source\0", channel,
++	       NULL);
+   
+   channel->recall_id = NULL;
+   channel->container = NULL;
+--- a/ags/audio/recall/ags_count_beats_audio_run.c
++++ b/ags/audio/recall/ags_count_beats_audio_run.c
+@@ -1031,10 +1031,13 @@
+ void
+ ags_count_beats_audio_run_done(AgsRecall *recall)
+ {
++  AgsAudio *audio;
++  AgsRecallID *recall_id;
+   GObject *soundcard;
+ 
+   AgsCountBeatsAudio *count_beats_audio;
+   AgsCountBeatsAudioRun *count_beats_audio_run;
++  AgsDelayAudioRun *delay_audio_run;
+ 
+   AgsCancelAudio *cancel_audio;
+ 
+@@ -1049,11 +1052,14 @@
+   pthread_mutex_t *application_mutex;
+   pthread_mutex_t *soundcard_mutex;
+   
+-  AGS_RECALL_CLASS(ags_count_beats_audio_run_parent_class)->done(recall);
+-
+   count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall);
+   count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio);
+ 
++  delay_audio_run = count_beats_audio_run->delay_audio_run;
++
++  audio = AGS_RECALL_AUDIO(count_beats_audio)->audio;
++  recall_id = AGS_RECALL(count_beats_audio_run)->recall_id;
++  
+   soundcard = AGS_RECALL_AUDIO(count_beats_audio)->audio->soundcard;
+ 
+   mutex_manager = ags_mutex_manager_get_instance();
+@@ -1085,10 +1091,6 @@
+   async_queue = (AgsThread *) ags_thread_find_type(main_loop,
+ 						   AGS_TYPE_TASK_THREAD);
+ 
+-  ags_recall_done((AgsRecall *) count_beats_audio_run->delay_audio_run);
+-  ags_audio_done(AGS_RECALL_AUDIO(count_beats_audio)->audio,
+-		 AGS_RECALL(count_beats_audio_run)->recall_id);
+-
+   if((AGS_RECALL_ID_SEQUENCER & (recall->recall_id->flags)) != 0){
+     sequencer = TRUE;
+   }else{
+@@ -1108,6 +1110,13 @@
+   /* append AgsCancelAudio */
+   ags_task_thread_append_task((AgsTaskThread *) async_queue,
+ 			      (AgsTask *) cancel_audio);  
++
++  /* call parent */
++  AGS_RECALL_CLASS(ags_count_beats_audio_run_parent_class)->done(recall);
++
++  ags_recall_done((AgsRecall *) delay_audio_run);
++  ags_audio_done(audio,
++		 recall_id);
+ }
+ 
+ /**

-- 
gsequencer packaging



More information about the pkg-multimedia-commits mailing list