gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r19519 - gnunet/src/fs


From: gnunet
Subject: [GNUnet-SVN] r19519 - gnunet/src/fs
Date: Sun, 29 Jan 2012 23:15:22 +0100

Author: grothoff
Date: 2012-01-29 23:15:22 +0100 (Sun, 29 Jan 2012)
New Revision: 19519

Modified:
   gnunet/src/fs/fs_dirmetascan.c
Log:
-fix

Modified: gnunet/src/fs/fs_dirmetascan.c
===================================================================
--- gnunet/src/fs/fs_dirmetascan.c      2012-01-29 22:04:45 UTC (rev 19518)
+++ gnunet/src/fs/fs_dirmetascan.c      2012-01-29 22:15:22 UTC (rev 19519)
@@ -78,6 +78,11 @@
   struct GNUNET_FS_ShareTreeItem *pos;
 
   /**
+   * Task scheduled when we are done.
+   */
+  GNUNET_SCHEDULER_TaskIdentifier stop_task;
+
+  /**
    * Arguments for helper.
    */
   char *args[4];
@@ -101,6 +106,8 @@
   /* free resources */
   if (NULL != ds->toplevel)
     GNUNET_FS_share_tree_free (ds->toplevel);
+  if (GNUNET_SCHEDULER_NO_TASK != ds->stop_task)
+    GNUNET_SCHEDULER_cancel (ds->stop_task);
   GNUNET_free_non_null (ds->ex_arg);
   GNUNET_free (ds->filename_expanded);
   GNUNET_free (ds);
@@ -202,6 +209,27 @@
 
 
 /**
+ * Task run last to shut everything down.
+ *
+ * @param cls the 'struct GNUNET_FS_DirScanner'
+ * @param tc unused
+ */
+static void
+finish_scan (void *cls,
+            const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct GNUNET_FS_DirScanner *ds = cls;
+
+  ds->stop_task = GNUNET_SCHEDULER_NO_TASK;
+  GNUNET_HELPER_stop (ds->helper);
+  ds->helper = NULL;
+  ds->progress_callback (ds->progress_callback_cls, 
+                        NULL, GNUNET_SYSERR,
+                        GNUNET_FS_DIRSCANNER_FINISHED);    
+}
+
+
+/**
  * Called every time there is data to read from the scanner.
  * Calls the scanner progress handler.
  *
@@ -354,11 +382,8 @@
       GNUNET_break (0);
       break;
     }
-    GNUNET_HELPER_stop (ds->helper);
-    ds->helper = NULL;
-    ds->progress_callback (ds->progress_callback_cls, 
-                          NULL, GNUNET_SYSERR,
-                          GNUNET_FS_DIRSCANNER_FINISHED);    
+    ds->stop_task = GNUNET_SCHEDULER_add_now (&finish_scan,
+                                             ds);
     return;
   default:
     GNUNET_break (0);
@@ -367,7 +392,6 @@
   ds->progress_callback (ds->progress_callback_cls, 
                         NULL, GNUNET_SYSERR,
                         GNUNET_FS_DIRSCANNER_INTERNAL_ERROR);
-
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]