Hello community,

here is the log from the commit of package gsequencer for openSUSE:Factory 
checked in at 2019-07-08 15:10:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gsequencer (Old)
 and      /work/SRC/openSUSE:Factory/.gsequencer.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gsequencer"

Mon Jul  8 15:10:33 2019 rev:44 rq:713586 version:2.2.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes    2019-07-04 
15:43:53.626167509 +0200
+++ /work/SRC/openSUSE:Factory/.gsequencer.new.4615/gsequencer.changes  
2019-07-08 15:10:34.747319417 +0200
@@ -1,0 +2,6 @@
+Fri Jul  5 05:58:02 UTC 2019 - Joël Krähemann <[email protected]>
+
+- new upstream v2.2.10 providing a new sync counter to AgsMainLoop
+  interface, resulting in less synchronization overhead.
+
+-------------------------------------------------------------------

Old:
----
  gsequencer-2.2.9.tar.gz

New:
----
  gsequencer-2.2.10.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gsequencer.spec ++++++
--- /var/tmp/diff_new_pack.FCHe8N/_old  2019-07-08 15:10:35.639320273 +0200
+++ /var/tmp/diff_new_pack.FCHe8N/_new  2019-07-08 15:10:35.643320277 +0200
@@ -21,7 +21,7 @@
 # activated with --with run_functional_tests command line switch.
 %bcond_with run_functional_tests
 Name:           gsequencer
-Version:        2.2.9
+Version:        2.2.10
 Release:        0
 Summary:        Audio processing engine
 License:        GPL-3.0+ AND AGPL-3.0+ AND GFDL-1.3

++++++ gsequencer-2.2.9.tar.gz -> gsequencer-2.2.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ChangeLog 
new/gsequencer-2.2.10/ChangeLog
--- old/gsequencer-2.2.9/ChangeLog      2019-07-02 20:00:28.000000000 +0200
+++ new/gsequencer-2.2.10/ChangeLog     2019-07-04 18:36:33.000000000 +0200
@@ -1,3 +1,12 @@
+ags (2.2.10)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * implemented ags_thread_global_get_use_sync_counter() synchronize 
threads with reduced overhead
+       * implemented ags_main_loop_sync_counter_inc()
+       * implemented ags_main_loop_sync_counter_dec()
+       * implemented ags_main_loop_sync_counter_test()
+       * fixed memory-leak in ags_message_envelope_free()
+
 ags (2.2.9)
 
        [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/audio/thread/ags_audio_loop.c 
new/gsequencer-2.2.10/ags/audio/thread/ags_audio_loop.c
--- old/gsequencer-2.2.9/ags/audio/thread/ags_audio_loop.c      2019-06-24 
00:53:09.000000000 +0200
+++ new/gsequencer-2.2.10/ags/audio/thread/ags_audio_loop.c     2019-07-04 
18:33:41.000000000 +0200
@@ -60,6 +60,9 @@
                                guint time_cycle, guint *time_spent);
 void ags_audio_loop_change_frequency(AgsMainLoop *main_loop,
                                     gdouble frequency);
+void ags_audio_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic);
+void ags_audio_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic);
+gboolean ags_audio_loop_sync_counter_test(AgsMainLoop *main_loop, guint tic);
 
 void ags_audio_loop_start(AgsThread *thread);
 void ags_audio_loop_run(AgsThread *thread);
@@ -253,15 +256,24 @@
 ags_audio_loop_main_loop_interface_init(AgsMainLoopInterface *main_loop)
 {
   main_loop->get_tree_lock = ags_audio_loop_get_tree_lock;
+
   main_loop->set_async_queue = ags_audio_loop_set_async_queue;
   main_loop->get_async_queue = ags_audio_loop_get_async_queue;
+
   main_loop->set_tic = ags_audio_loop_set_tic;
   main_loop->get_tic = ags_audio_loop_get_tic;
+
   main_loop->set_last_sync = ags_audio_loop_set_last_sync;
   main_loop->get_last_sync = ags_audio_loop_get_last_sync;
+
   main_loop->interrupt = NULL;
   main_loop->monitor = ags_audio_loop_monitor;
+
   main_loop->change_frequency = ags_audio_loop_change_frequency;
+
+  main_loop->sync_counter_inc = ags_audio_loop_sync_counter_inc;
+  main_loop->sync_counter_dec = ags_audio_loop_sync_counter_dec;
+  main_loop->sync_counter_test = ags_audio_loop_sync_counter_test;
 }
 
 void
@@ -801,6 +813,100 @@
 }
 
 void
+ags_audio_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic)
+{
+  AgsAudioLoop *audio_loop;
+
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return;
+  }
+  
+  audio_loop = AGS_AUDIO_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(audio_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* increment */
+  pthread_mutex_lock(thread_mutex);
+  
+  audio_loop->sync_counter[tic] += 1;
+
+  pthread_mutex_unlock(thread_mutex);
+}
+
+void
+ags_audio_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic)
+{
+  AgsAudioLoop *audio_loop;
+
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return;
+  }
+  
+  audio_loop = AGS_AUDIO_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(audio_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* increment */
+  pthread_mutex_lock(thread_mutex);
+
+  if(audio_loop->sync_counter[tic] > 0){
+    audio_loop->sync_counter[tic] -= 1;
+  }
+  
+  pthread_mutex_unlock(thread_mutex);
+}
+
+gboolean
+ags_audio_loop_sync_counter_test(AgsMainLoop *main_loop, guint tic)
+{
+  AgsAudioLoop *audio_loop;
+
+  gboolean success;
+  
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return(FALSE);
+  }
+  
+  audio_loop = AGS_AUDIO_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(audio_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* test */
+  success = FALSE;
+  
+  pthread_mutex_lock(thread_mutex);
+
+  if(audio_loop->sync_counter[tic] == 0){
+    success = TRUE;
+  }
+  
+  pthread_mutex_unlock(thread_mutex);
+
+  return(success);
+}
+
+void
 ags_audio_loop_start(AgsThread *thread)
 {
   AgsAudioLoop *audio_loop;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/audio/thread/ags_audio_loop.h 
new/gsequencer-2.2.10/ags/audio/thread/ags_audio_loop.h
--- old/gsequencer-2.2.9/ags/audio/thread/ags_audio_loop.h      2019-04-29 
20:06:20.000000000 +0200
+++ new/gsequencer-2.2.10/ags/audio/thread/ags_audio_loop.h     2019-07-04 
16:24:22.000000000 +0200
@@ -84,6 +84,8 @@
 
   guint time_cycle;
   volatile guint time_spent;
+
+  guint sync_counter[3];
   
   GObject *application_context;
   GObject *default_output_soundcard;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/object/ags_main_loop.c 
new/gsequencer-2.2.10/ags/object/ags_main_loop.c
--- old/gsequencer-2.2.9/ags/object/ags_main_loop.c     2019-04-29 
20:06:20.000000000 +0200
+++ new/gsequencer-2.2.10/ags/object/ags_main_loop.c    2019-07-04 
16:21:34.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2015 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -390,3 +390,68 @@
                0,
                frequency);
 }
+
+/**
+ * ags_main_loop_sync_counter_inc:
+ * @main_loop: the #AgsMainLoop
+ * @tic: the current tic
+ *
+ * Increment sync counter.
+ *
+ * Since: 2.2.10
+ */
+void
+ags_main_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic)
+{
+  AgsMainLoopInterface *main_loop_interface;
+
+  g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), FALSE);
+  main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop);
+  g_return_val_if_fail(main_loop_interface->sync_counter_inc, FALSE);
+
+  main_loop_interface->sync_counter_inc(main_loop, tic);
+}
+
+/**
+ * ags_main_loop_sync_counter_dec:
+ * @main_loop: the #AgsMainLoop
+ * @tic: the current tic
+ *
+ * Decrement sync counter.
+ *
+ * Since: 2.2.10
+ */
+void
+ags_main_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic)
+{
+  AgsMainLoopInterface *main_loop_interface;
+
+  g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), FALSE);
+  main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop);
+  g_return_val_if_fail(main_loop_interface->sync_counter_dec, FALSE);
+
+  main_loop_interface->sync_counter_dec(main_loop, tic);
+}
+
+/**
+ * ags_main_loop_sync_counter_inc:
+ * @main_loop: the #AgsMainLoop
+ * @tic: the current tic
+ *
+ * test sync counter.
+ *
+ * Returns: %TRUE if synced, otherwise %FALSE
+ * 
+ * Since: 2.2.10
+ */
+gboolean
+ags_main_loop_sync_counter_test(AgsMainLoop *main_loop, guint tic)
+{
+  AgsMainLoopInterface *main_loop_interface;
+
+  g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), FALSE);
+  main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop);
+  g_return_val_if_fail(main_loop_interface->sync_counter_test, FALSE);
+
+  return(main_loop_interface->sync_counter_test(main_loop, tic));
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/object/ags_main_loop.h 
new/gsequencer-2.2.10/ags/object/ags_main_loop.h
--- old/gsequencer-2.2.9/ags/object/ags_main_loop.h     2019-04-29 
20:06:20.000000000 +0200
+++ new/gsequencer-2.2.10/ags/object/ags_main_loop.h    2019-07-04 
16:22:01.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2015 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -63,6 +63,10 @@
 
   void (*change_frequency)(AgsMainLoop *main_loop,
                           gdouble frequency);
+
+  void (*sync_counter_inc)(AgsMainLoop *main_loop, guint tic);
+  void (*sync_counter_dec)(AgsMainLoop *main_loop, guint tic);
+  gboolean (*sync_counter_test)(AgsMainLoop *main_loop, guint tic);
 };
 
 GType ags_main_loop_get_type();
@@ -90,4 +94,8 @@
 void ags_main_loop_change_frequency(AgsMainLoop *main_loop,
                                    gdouble frequency);
 
+void ags_main_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic);
+void ags_main_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic);
+gboolean ags_main_loop_sync_counter_test(AgsMainLoop *main_loop, guint tic);
+
 #endif /*__AGS_MAIN_LOOP_H__*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_generic_main_loop.c 
new/gsequencer-2.2.10/ags/thread/ags_generic_main_loop.c
--- old/gsequencer-2.2.9/ags/thread/ags_generic_main_loop.c     2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_generic_main_loop.c    2019-07-04 
18:34:49.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2015 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -43,6 +43,9 @@
 guint ags_generic_main_loop_get_tic(AgsMainLoop *main_loop);
 void ags_generic_main_loop_set_last_sync(AgsMainLoop *main_loop, guint 
last_sync);
 guint ags_generic_main_loop_get_last_sync(AgsMainLoop *main_loop);
+void ags_generic_main_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic);
+void ags_generic_main_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic);
+gboolean ags_generic_main_loop_sync_counter_test(AgsMainLoop *main_loop, guint 
tic);
 
 void ags_generic_main_loop_start(AgsThread *thread);
 
@@ -153,12 +156,19 @@
 ags_generic_main_loop_main_loop_interface_init(AgsMainLoopInterface *main_loop)
 {
   main_loop->get_tree_lock = ags_generic_main_loop_get_tree_lock;
+
   main_loop->set_async_queue = ags_generic_main_loop_set_async_queue;
   main_loop->get_async_queue = ags_generic_main_loop_get_async_queue;
+
   main_loop->set_tic = ags_generic_main_loop_set_tic;
   main_loop->get_tic = ags_generic_main_loop_get_tic;
+
   main_loop->set_last_sync = ags_generic_main_loop_set_last_sync;
   main_loop->get_last_sync = ags_generic_main_loop_get_last_sync;
+
+  main_loop->sync_counter_inc = ags_generic_main_loop_sync_counter_inc;
+  main_loop->sync_counter_dec = ags_generic_main_loop_sync_counter_dec;
+  main_loop->sync_counter_test = ags_generic_main_loop_sync_counter_test;
 }
 
 void
@@ -328,6 +338,100 @@
 }
 
 void
+ags_generic_main_loop_sync_counter_inc(AgsMainLoop *main_loop, guint tic)
+{
+  AgsGenericMainLoop *generic_main_loop;
+
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return;
+  }
+  
+  generic_main_loop = AGS_GENERIC_MAIN_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(generic_main_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* increment */
+  pthread_mutex_lock(thread_mutex);
+  
+  generic_main_loop->sync_counter[tic] += 1;
+
+  pthread_mutex_unlock(thread_mutex);
+}
+
+void
+ags_generic_main_loop_sync_counter_dec(AgsMainLoop *main_loop, guint tic)
+{
+  AgsGenericMainLoop *generic_main_loop;
+
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return;
+  }
+  
+  generic_main_loop = AGS_GENERIC_MAIN_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(generic_main_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* increment */
+  pthread_mutex_lock(thread_mutex);
+
+  if(generic_main_loop->sync_counter[tic] > 0){
+    generic_main_loop->sync_counter[tic] -= 1;
+  }
+  
+  pthread_mutex_unlock(thread_mutex);
+}
+
+gboolean
+ags_generic_main_loop_sync_counter_test(AgsMainLoop *main_loop, guint tic)
+{
+  AgsGenericMainLoop *generic_main_loop;
+
+  gboolean success;
+  
+  pthread_mutex_t *thread_mutex;
+
+  if(tic >= 3){
+    return(FALSE);
+  }
+  
+  generic_main_loop = AGS_GENERIC_MAIN_LOOP(main_loop);
+
+  /* get thread mutex */
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+  
+  thread_mutex = AGS_THREAD(generic_main_loop)->obj_mutex;
+  
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+
+  /* test */
+  success = FALSE;
+  
+  pthread_mutex_lock(thread_mutex);
+
+  if(generic_main_loop->sync_counter[tic] == 0){
+    success = TRUE;
+  }
+  
+  pthread_mutex_unlock(thread_mutex);
+
+  return(success);
+}
+
+void
 ags_generic_main_loop_start(AgsThread *thread)
 {
   if((AGS_THREAD_SINGLE_LOOP & (g_atomic_int_get(&(thread->flags)))) == 0){
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_generic_main_loop.h 
new/gsequencer-2.2.10/ags/thread/ags_generic_main_loop.h
--- old/gsequencer-2.2.9/ags/thread/ags_generic_main_loop.h     2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_generic_main_loop.h    2019-07-04 
18:32:41.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2015 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -48,6 +48,8 @@
   volatile guint tic;
   volatile guint last_sync;
 
+  guint sync_counter[3];
+
   GObject *application_context;
   
   GObject *async_queue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_message_queue.c 
new/gsequencer-2.2.10/ags/thread/ags_message_queue.c
--- old/gsequencer-2.2.9/ags/thread/ags_message_queue.c 2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_message_queue.c        2019-07-04 
16:21:29.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2017 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -301,10 +301,12 @@
 void
 ags_message_envelope_free(AgsMessageEnvelope *message)
 {
+  guint i;
+  
   if(message == NULL){
     return;
   }
-
+  
   if(message->sender != NULL){
     g_object_unref(message->sender);
   }
@@ -318,6 +320,11 @@
   }
   
   g_free(message->parameter_name);
+
+  for(i = 0; i < message->n_params; i++){
+    g_value_unset(&(message->value[i]));
+  }
+  
   g_free(message->value);
   
   g_free(message);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_message_queue.h 
new/gsequencer-2.2.10/ags/thread/ags_message_queue.h
--- old/gsequencer-2.2.9/ags/thread/ags_message_queue.h 2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_message_queue.h        2019-07-04 
16:22:23.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2017 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_thread-posix.c 
new/gsequencer-2.2.10/ags/thread/ags_thread-posix.c
--- old/gsequencer-2.2.9/ags/thread/ags_thread-posix.c  2019-06-01 
20:20:06.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_thread-posix.c 2019-07-04 
17:28:29.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2018 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -124,6 +124,8 @@
 
 static pthread_mutex_t ags_thread_class_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static gboolean ags_thread_global_use_sync_counter = TRUE;
+
 GType
 ags_thread_get_type()
 {
@@ -1058,6 +1060,29 @@
 }
 
 /**
+ * ags_thread_global_get_use_sync_counter:
+ * 
+ * Get global config value use sync counter.
+ *
+ * Returns: if %TRUE use sync counter, else not
+ * 
+ * Since: 2.2.10
+ */
+gboolean
+ags_thread_global_get_use_sync_counter()
+{
+  gboolean use_sync_counter;
+
+  pthread_mutex_lock(ags_thread_get_class_mutex());
+
+  use_sync_counter = ags_thread_global_use_sync_counter;
+
+  pthread_mutex_unlock(ags_thread_get_class_mutex());
+  
+  return(use_sync_counter);
+}
+
+/**
  * ags_thread_test_flags:
  * @thread: the #AgsThread
  * @flags: the flags
@@ -2108,8 +2133,12 @@
 
   main_loop = ags_thread_get_toplevel(thread);
 
-  retval = ags_thread_is_tree_ready_recursive(main_loop);
-
+  if(ags_thread_global_get_use_sync_counter()){    
+    retval = ags_main_loop_sync_counter_test(AGS_MAIN_LOOP(main_loop), tic);
+  }else{
+    retval = ags_thread_is_tree_ready_recursive(main_loop);
+  }
+  
   return(retval);
 }
 
@@ -2747,10 +2776,18 @@
   void ags_thread_clock_sync(AgsThread *thread){
     guint next_tic, current_tic;
 
+    gboolean skip_sync_counter;
+    
     /* sync */
+    skip_sync_counter = FALSE;
+    
     pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop)));
 
     if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){
+      if((AGS_THREAD_IMMEDIATE_SYNC & (g_atomic_int_get(&(thread->flags)))) == 
0){
+       skip_sync_counter = TRUE;
+      }
+
       g_atomic_int_or(&(thread->sync_flags),
                      AGS_THREAD_MARK_SYNCED);
       
@@ -2828,6 +2865,16 @@
       }
       break;
     }
+
+    if(ags_thread_global_get_use_sync_counter()){
+      if(!skip_sync_counter){
+       ags_main_loop_sync_counter_dec(AGS_MAIN_LOOP(main_loop),
+                                      thread->current_tic);
+      }
+
+      ags_main_loop_sync_counter_inc(AGS_MAIN_LOOP(main_loop),
+                                    next_tic);
+    }
     
     if(!ags_thread_is_tree_ready(thread,
                                 current_tic)){
@@ -2871,7 +2918,7 @@
       ags_thread_reset_all(main_loop);
 
       
pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop)));
-    }  
+    }
   }
   
   void ags_thread_clock_wait_async(){
@@ -3378,7 +3425,7 @@
     
     thread->current_tic = ags_main_loop_get_tic(AGS_MAIN_LOOP(main_loop));
     
-    
pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop)));
+    
pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop)));  
   }else{
     thread->current_tic = 0;
   }
@@ -3785,6 +3832,11 @@
     break;
   }
 
+  if(ags_thread_global_get_use_sync_counter()){
+    ags_main_loop_sync_counter_dec(AGS_MAIN_LOOP(main_loop),
+                                  thread->current_tic);
+  }
+  
   if(ags_thread_is_tree_ready(thread,
                              thread->current_tic)){
     guint next_tic, current_tic;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/ags/thread/ags_thread-posix.h 
new/gsequencer-2.2.10/ags/thread/ags_thread-posix.h
--- old/gsequencer-2.2.9/ags/thread/ags_thread-posix.h  2019-04-29 
20:06:21.000000000 +0200
+++ new/gsequencer-2.2.10/ags/thread/ags_thread-posix.h 2019-07-04 
16:35:42.000000000 +0200
@@ -1,5 +1,5 @@
 /* GSequencer - Advanced GTK Sequencer
- * Copyright (C) 2005-2018 Joël Krähemann
+ * Copyright (C) 2005-2019 Joël Krähemann
  *
  * This file is part of GSequencer.
  *
@@ -289,6 +289,8 @@
 
 pthread_mutex_t* ags_thread_get_class_mutex();
 
+gboolean ags_thread_global_get_use_sync_counter();
+
 gboolean ags_thread_test_flags(AgsThread *thread, guint flags);
 void ags_thread_set_flags(AgsThread *thread, guint flags);
 void ags_thread_unset_flags(AgsThread *thread, guint flags);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/configure 
new/gsequencer-2.2.10/configure
--- old/gsequencer-2.2.9/configure      2019-07-02 20:04:02.000000000 +0200
+++ new/gsequencer-2.2.10/configure     2019-07-04 18:42:51.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gsequencer 2.2.9.
+# Generated by GNU Autoconf 2.69 for gsequencer 2.2.10.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='gsequencer'
 PACKAGE_TARNAME='gsequencer'
-PACKAGE_VERSION='2.2.9'
-PACKAGE_STRING='gsequencer 2.2.9'
+PACKAGE_VERSION='2.2.10'
+PACKAGE_STRING='gsequencer 2.2.10'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1508,7 +1508,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gsequencer 2.2.9 to adapt to many kinds of systems.
+\`configure' configures gsequencer 2.2.10 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1583,7 +1583,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gsequencer 2.2.9:";;
+     short | recursive ) echo "Configuration of gsequencer 2.2.10:";;
    esac
   cat <<\_ACEOF
 
@@ -1790,7 +1790,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gsequencer configure 2.2.9
+gsequencer configure 2.2.10
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2388,7 +2388,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gsequencer $as_me 2.2.9, which was
+It was created by gsequencer $as_me 2.2.10, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3255,7 +3255,7 @@
 
 # Define the identity of the package.
  PACKAGE='gsequencer'
- VERSION='2.2.9'
+ VERSION='2.2.10'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -23891,7 +23891,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gsequencer $as_me 2.2.9, which was
+This file was extended by gsequencer $as_me 2.2.10, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23957,7 +23957,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gsequencer config.status 2.2.9
+gsequencer config.status 2.2.10
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/configure.ac 
new/gsequencer-2.2.10/configure.ac
--- old/gsequencer-2.2.9/configure.ac   2019-07-02 20:03:45.000000000 +0200
+++ new/gsequencer-2.2.10/configure.ac  2019-07-04 18:42:35.000000000 +0200
@@ -8,7 +8,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.69])
-AC_INIT([gsequencer],[2.2.9],[[email protected]])
+AC_INIT([gsequencer],[2.2.10],[[email protected]])
 AM_INIT_AUTOMAKE([subdir-objects])
 AC_CONFIG_SRCDIR([ags/config.h.in])
 AC_CONFIG_HEADERS([ags/config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/libags.sym 
new/gsequencer-2.2.10/libags.sym
--- old/gsequencer-2.2.9/libags.sym     2019-07-02 20:05:09.000000000 +0200
+++ new/gsequencer-2.2.10/libags.sym    2019-07-04 18:43:30.000000000 +0200
@@ -243,6 +243,9 @@
 ags_main_loop_interrupt
 ags_main_loop_monitor
 ags_main_loop_change_frequency
+ags_main_loop_sync_counter_inc
+ags_main_loop_sync_counter_dec
+ags_main_loop_sync_counter_test
 ags_seekable_get_type
 ags_seekable_seek
 ags_cursor_get_type
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/libags.sym.in 
new/gsequencer-2.2.10/libags.sym.in
--- old/gsequencer-2.2.9/libags.sym.in  2019-06-29 12:22:54.000000000 +0200
+++ new/gsequencer-2.2.10/libags.sym.in 2019-07-04 18:41:56.000000000 +0200
@@ -261,6 +261,9 @@
 ags_main_loop_interrupt
 ags_main_loop_monitor
 ags_main_loop_change_frequency
+ags_main_loop_sync_counter_inc
+ags_main_loop_sync_counter_dec
+ags_main_loop_sync_counter_test
 ags_seekable_get_type
 ags_seekable_seek
 ags_cursor_get_type
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/libags_thread.sym 
new/gsequencer-2.2.10/libags_thread.sym
--- old/gsequencer-2.2.9/libags_thread.sym      2019-07-02 20:05:09.000000000 
+0200
+++ new/gsequencer-2.2.10/libags_thread.sym     2019-07-04 18:43:30.000000000 
+0200
@@ -16,6 +16,7 @@
 ags_thread_resume
 ags_thread_get_type
 ags_thread_get_class_mutex
+ags_thread_global_get_use_sync_counter
 ags_thread_test_flags
 ags_thread_set_flags
 ags_thread_unset_flags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-2.2.9/libags_thread.sym.in 
new/gsequencer-2.2.10/libags_thread.sym.in
--- old/gsequencer-2.2.9/libags_thread.sym.in   2019-06-29 12:22:54.000000000 
+0200
+++ new/gsequencer-2.2.10/libags_thread.sym.in  2019-07-04 18:41:56.000000000 
+0200
@@ -34,6 +34,7 @@
 ags_thread_resume
 ags_thread_get_type
 ags_thread_get_class_mutex
+ags_thread_global_get_use_sync_counter
 ags_thread_test_flags
 ags_thread_set_flags
 ags_thread_unset_flags


Reply via email to