]> git.street.me.uk Git - andy/viking.git/blobdiff - src/background.c
Be more selective in collecting realtime trackpoints.
[andy/viking.git] / src / background.c
index e83ff64567535c06f13f4e1a6902df2900b9f54a..38b0eca02d62b6022a24d44ab8e60b0b5bcca0f8 100644 (file)
@@ -105,7 +105,6 @@ void thread_helper ( gpointer args[6] )
 
   func ( userdata, args );
 
-  /* need MUTEX ? */
   gdk_threads_enter();
   if ( ! args[0] )
     gtk_list_store_remove ( bgstore, (GtkTreeIter *) args[5] );
@@ -150,28 +149,33 @@ static void cancel_job_with_iter ( GtkTreeIter *piter )
     /* need MUTEX ? */
     args[0] = GINT_TO_POINTER(1); /* set killswitch */
 
-    bgitemcount -= GPOINTER_TO_INT(args[6]);
-
     gtk_list_store_remove ( bgstore, piter );
 }
 
 static void bgwindow_response (GtkDialog *dialog, gint arg1 )
 {
- if ( arg1 == 1 ) /* cancel */
- {
-   GtkTreeIter iter;
-   if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW(bgtreeview) ), NULL, &iter ) )
-     cancel_job_with_iter ( &iter );
-    background_thread_update();
-  }
+  /* note this function is a signal handler called back from the GTK main loop, 
+   * so GDK is already locked.  We need to release the lock before calling 
+   * thread-safe routines
+   */
+  if ( arg1 == 1 ) /* cancel */
+    {
+      GtkTreeIter iter;
+      if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW(bgtreeview) ), NULL, &iter ) )
+       cancel_job_with_iter ( &iter );
+      gdk_threads_leave();
+      background_thread_update();
+      gdk_threads_enter();
+    }
   else if ( arg1 == 2 ) /* clear */
-  {
-    GtkTreeIter iter;
-    while ( gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(bgstore), &iter ) )
-      cancel_job_with_iter ( &iter );
-    bgitemcount = 0;
-    background_thread_update();
-  }
+    {
+      GtkTreeIter iter;
+      while ( gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(bgstore), &iter ) )
+       cancel_job_with_iter ( &iter );
+      gdk_threads_leave();
+      background_thread_update();
+      gdk_threads_enter();
+    }
   else /* OK */
     gtk_widget_hide ( bgwindow );
 }