[tracker/wip/carlosg/more-bus-fixes: 2/4] libtracker-sparql/bus: Avoid reentrancy on bus batches




commit 873db2a347b121ccd5e17507498dec6dbec7fe50
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Jul 23 19:36:38 2022 +0200

    libtracker-sparql/bus: Avoid reentrancy on bus batches
    
    The tracker_batch_execute() call is nowadays implemented through
    tracker_batch_execute_async turned into a synchronous operation.
    However that results in tracker_batch_execute*() being called
    twice and triggering warnings about the batch having been already
    executed.
    
    So implement tracker_batch_execute() for bus cursors over the
    internal bus connection functions, so that we don't cause
    reentrance on the high level API (which is still meant to catch
    user misuse of batches).

 src/libtracker-sparql/bus/tracker-bus-batch.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-sparql/bus/tracker-bus-batch.c b/src/libtracker-sparql/bus/tracker-bus-batch.c
index b2f144ca3..7e100204c 100644
--- a/src/libtracker-sparql/bus/tracker-bus-batch.c
+++ b/src/libtracker-sparql/bus/tracker-bus-batch.c
@@ -37,6 +37,11 @@ typedef struct {
 
 G_DEFINE_TYPE (TrackerBusBatch, tracker_bus_batch, TRACKER_TYPE_BATCH)
 
+static void tracker_bus_batch_execute_async (TrackerBatch        *batch,
+                                            GCancellable        *cancellable,
+                                            GAsyncReadyCallback  callback,
+                                            gpointer             user_data);
+
 static void
 tracker_bus_batch_finalize (GObject *object)
 {
@@ -97,10 +102,10 @@ tracker_bus_batch_execute (TrackerBatch  *batch,
        data.loop = g_main_loop_new (context, FALSE);
        g_main_context_push_thread_default (context);
 
-       tracker_batch_execute_async (batch,
-                                    cancellable,
-                                    execute_cb,
-                                    &data);
+       tracker_bus_batch_execute_async (batch,
+                                        cancellable,
+                                        execute_cb,
+                                        &data);
 
        g_main_loop_run (data.loop);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]