[Top][All Lists]
[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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19093 - gnunet/src/fs,
gnunet <=