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 <jkraehemann(a)gmail.com>
+
+- 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 <jkraehemann(a)gmail.com>.
#
@@ -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='jkraehemann(a)gmail.com'
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],[jkraehemann(a)gmail.com])
+AC_INIT([gsequencer],[2.2.10],[jkraehemann(a)gmail.com])
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