gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r19093 - gnunet/src/fs
Date: Wed, 11 Jan 2012 22:11:51 +0100

Author: grothoff
Date: 2012-01-11 22:11:51 +0100 (Wed, 11 Jan 2012)
New Revision: 19093

Modified:
   gnunet/src/fs/fs_api.c
   gnunet/src/fs/fs_api.h
   gnunet/src/fs/fs_publish.c
Log:
fixing bug to ensure that we properly descend into deep directories for the 
various publish start/stop/suspend/resume event callbacks

Modified: gnunet/src/fs/fs_api.c
===================================================================
--- gnunet/src/fs/fs_api.c      2012-01-11 17:26:19 UTC (rev 19092)
+++ gnunet/src/fs/fs_api.c      2012-01-11 21:11:51 UTC (rev 19093)
@@ -1243,13 +1243,24 @@
                    struct GNUNET_FS_BlockOptions *bo, int *do_index,
                    void **client_info)
 {
-  struct GNUNET_FS_PublishContext *sc = cls;
+  struct GNUNET_FS_PublishContext *pc = cls;
   struct GNUNET_FS_ProgressInfo pi;
 
+  if (GNUNET_YES == pc->skip_next_fi_callback)
+  {
+    pc->skip_next_fi_callback = GNUNET_NO;
+    return GNUNET_OK;
+  }
   pi.status = GNUNET_FS_STATUS_PUBLISH_RESUME;
-  pi.value.publish.specifics.resume.message = sc->fi->emsg;
-  pi.value.publish.specifics.resume.chk_uri = sc->fi->chk_uri;
-  *client_info = GNUNET_FS_publish_make_status_ (&pi, sc, fi, 0);
+  pi.value.publish.specifics.resume.message = pc->fi->emsg;
+  pi.value.publish.specifics.resume.chk_uri = pc->fi->chk_uri;
+  *client_info = GNUNET_FS_publish_make_status_ (&pi, pc, fi, 0);
+  if (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (meta))
+  {
+    /* process entries in directory */
+    pc->skip_next_fi_callback = GNUNET_YES;
+    GNUNET_FS_file_information_inspect (fi, &fip_signal_resume, pc);
+  }
   return GNUNET_OK;
 }
 

Modified: gnunet/src/fs/fs_api.h
===================================================================
--- gnunet/src/fs/fs_api.h      2012-01-11 17:26:19 UTC (rev 19092)
+++ gnunet/src/fs/fs_api.h      2012-01-11 21:11:51 UTC (rev 19093)
@@ -1203,6 +1203,13 @@
    * Set to GNUNET_YES if all processing has completed.
    */
   int all_done;
+  
+  /**
+   * Flag set to GNUNET_YES if the next callback from
+   * GNUNET_FS_file_information_inspect should be skipped because it
+   * is for the directory which was already processed with the parent.
+   */
+  int skip_next_fi_callback;
 };
 
 

Modified: gnunet/src/fs/fs_publish.c
===================================================================
--- gnunet/src/fs/fs_publish.c  2012-01-11 17:26:19 UTC (rev 19092)
+++ gnunet/src/fs/fs_publish.c  2012-01-11 21:11:51 UTC (rev 19093)
@@ -954,6 +954,11 @@
   unsigned int kc;
   uint64_t left;
 
+  if (GNUNET_YES == pc->skip_next_fi_callback)
+  {
+    pc->skip_next_fi_callback = GNUNET_NO;
+    return GNUNET_OK;
+  }
 #if DEBUG_PUBLISH
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting publish operation\n");
 #endif
@@ -991,6 +996,12 @@
   pi.status = GNUNET_FS_STATUS_PUBLISH_START;
   *client_info = GNUNET_FS_publish_make_status_ (&pi, pc, fi, 0);
   GNUNET_FS_file_information_sync_ (fi);
+  if (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (meta))
+  {
+    /* process entries in directory */
+    pc->skip_next_fi_callback = GNUNET_YES;
+    GNUNET_FS_file_information_inspect (fi, &fip_signal_start, pc);
+  }
   return GNUNET_OK;
 }
 
@@ -1020,6 +1031,17 @@
   struct GNUNET_FS_ProgressInfo pi;
   uint64_t off;
 
+  if (GNUNET_YES == pc->skip_next_fi_callback)
+  {
+    pc->skip_next_fi_callback = GNUNET_NO;
+    return GNUNET_OK;
+  }
+  if (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (meta))
+  {
+    /* process entries in directory */
+    pc->skip_next_fi_callback = GNUNET_YES;
+    GNUNET_FS_file_information_inspect (fi, &fip_signal_suspend, pc);
+  }
 #if DEBUG_PUBLISH
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Suspending publish operation\n");
 #endif
@@ -1204,6 +1226,17 @@
   struct GNUNET_FS_ProgressInfo pi;
   uint64_t off;
 
+  if (GNUNET_YES == pc->skip_next_fi_callback)
+  {
+    pc->skip_next_fi_callback = GNUNET_NO;
+    return GNUNET_OK;
+  }
+  if (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (meta))
+  {
+    /* process entries in directory first */
+    pc->skip_next_fi_callback = GNUNET_YES;
+    GNUNET_FS_file_information_inspect (fi, &fip_signal_stop, pc);
+  }
   if (fi->serialization != NULL)
   {
     GNUNET_FS_remove_sync_file_ (pc->h, GNUNET_FS_SYNC_PATH_FILE_INFO,




reply via email to

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