[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r9178 - in gnunet/src: fs include
From: |
gnunet |
Subject: |
[GNUnet-SVN] r9178 - in gnunet/src: fs include |
Date: |
Sun, 18 Oct 2009 14:23:22 -0600 |
Author: grothoff
Date: 2009-10-18 14:23:21 -0600 (Sun, 18 Oct 2009)
New Revision: 9178
Modified:
gnunet/src/fs/fs.h
gnunet/src/fs/fs_file_information.c
gnunet/src/fs/fs_publish.c
gnunet/src/fs/fs_tree.c
gnunet/src/fs/test_fs_download.c
gnunet/src/fs/test_fs_download_data.conf
gnunet/src/include/gnunet_fs_service.h
Log:
more work on bugs and testing of fs service
Modified: gnunet/src/fs/fs.h
===================================================================
--- gnunet/src/fs/fs.h 2009-10-18 20:23:04 UTC (rev 9177)
+++ gnunet/src/fs/fs.h 2009-10-18 20:23:21 UTC (rev 9178)
@@ -552,6 +552,11 @@
* for this upload.
*/
int rid;
+
+ /**
+ * Set to GNUNET_YES if all processing has completed.
+ */
+ int all_done;
};
Modified: gnunet/src/fs/fs_file_information.c
===================================================================
--- gnunet/src/fs/fs_file_information.c 2009-10-18 20:23:04 UTC (rev 9177)
+++ gnunet/src/fs/fs_file_information.c 2009-10-18 20:23:21 UTC (rev 9178)
@@ -249,6 +249,7 @@
char **emsg)
{
char *data = cls;
+
if (max == 0)
{
GNUNET_free (data);
@@ -343,6 +344,7 @@
ret->data.file.reader = reader;
ret->data.file.reader_cls = reader_cls;
ret->data.file.do_index = do_index;
+ ret->data.file.file_size = length;
ret->anonymity = anonymity;
ret->priority = priority;
GNUNET_FS_file_information_sync (ret);
@@ -803,15 +805,16 @@
GNUNET_FS_file_information_destroy (pos, cleaner, cleaner_cls);
}
/* clean up client-info */
- cleaner (cleaner_cls,
- fi,
- fi->data.dir.dir_size,
- fi->meta,
- &fi->keywords,
- &fi->anonymity,
- &fi->priority,
- &fi->expirationTime,
- &fi->client_info);
+ if (NULL != cleaner)
+ cleaner (cleaner_cls,
+ fi,
+ fi->data.dir.dir_size,
+ fi->meta,
+ &fi->keywords,
+ &fi->anonymity,
+ &fi->priority,
+ &fi->expirationTime,
+ &fi->client_info);
GNUNET_free_non_null (fi->data.dir.dir_data);
GNUNET_free (fi->data.dir.dirname);
}
@@ -820,25 +823,27 @@
/* call clean-up function of the reader */
fi->data.file.reader (fi->data.file.reader_cls, 0, 0, NULL, NULL);
/* clean up client-info */
- cleaner (cleaner_cls,
- fi,
- fi->data.file.file_size,
- fi->meta,
- &fi->keywords,
- &fi->anonymity,
- &fi->priority,
- &fi->expirationTime,
- &fi->client_info);
+ if (NULL != cleaner)
+ cleaner (cleaner_cls,
+ fi,
+ fi->data.file.file_size,
+ fi->meta,
+ &fi->keywords,
+ &fi->anonymity,
+ &fi->priority,
+ &fi->expirationTime,
+ &fi->client_info);
}
GNUNET_free_non_null (fi->emsg);
/* clean up serialization */
- if (0 != UNLINK (fi->serialization))
+ if ( (NULL != fi->serialization) &&
+ (0 != UNLINK (fi->serialization)) )
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
"unlink",
fi->serialization);
GNUNET_FS_uri_destroy (fi->keywords);
GNUNET_CONTAINER_meta_data_destroy (fi->meta);
- GNUNET_free (fi->serialization);
+ GNUNET_free_non_null (fi->serialization);
GNUNET_free (fi);
}
Modified: gnunet/src/fs/fs_publish.c
===================================================================
--- gnunet/src/fs/fs_publish.c 2009-10-18 20:23:04 UTC (rev 9177)
+++ gnunet/src/fs/fs_publish.c 2009-10-18 20:23:21 UTC (rev 9178)
@@ -135,7 +135,8 @@
publish_cleanup (struct GNUNET_FS_PublishContext *sc)
{
GNUNET_FS_file_information_destroy (sc->fi, NULL, NULL);
- GNUNET_FS_namespace_delete (sc->namespace, GNUNET_NO);
+ if (sc->namespace != NULL)
+ GNUNET_FS_namespace_delete (sc->namespace, GNUNET_NO);
GNUNET_free_non_null (sc->nid);
GNUNET_free_non_null (sc->nuid);
GNUNET_DATASTORE_disconnect (sc->dsh, GNUNET_NO);
@@ -181,7 +182,6 @@
pcc->p->client_info
= pcc->sc->h->upcb (pcc->sc->h->upcb_cls,
&pi);
- return;
}
GNUNET_FS_file_information_sync (pcc->p);
if (NULL != pcc->cont)
@@ -272,6 +272,7 @@
}
// FIXME: release the datastore reserve here!
signal_publish_completion (sc->fi, sc);
+ sc->all_done = GNUNET_YES;
}
@@ -392,6 +393,9 @@
{
pt_size = GNUNET_MIN(max,
p->data.file.file_size - offset);
+ if (pt_size == 0)
+ return 0; /* calling reader with pt_size==0
+ might free buf, so don't! */
if (pt_size !=
p->data.file.reader (p->data.file.reader_cls,
offset,
@@ -498,6 +502,7 @@
dpc_cls = GNUNET_malloc(sizeof(struct PutContCtx));
dpc_cls->cont = &do_upload;
dpc_cls->cont_cls = sc;
+ dpc_cls->sc = sc;
dpc_cls->p = p;
if ( (p->is_directory) &&
(p->data.file.do_index) &&
@@ -833,6 +838,7 @@
= sc->h->upcb (sc->h->upcb_cls,
&pi);
}
+ sc->all_done = GNUNET_YES;
return;
}
/* handle completion */
@@ -1034,6 +1040,7 @@
* Stop an upload. Will abort incomplete uploads (but
* not remove blocks that have already been publishd) or
* simply clean up the state for completed uploads.
+ * Must NOT be called from within the event callback!
*
* @param sc context for the upload to stop
*/
@@ -1042,6 +1049,8 @@
{
if (GNUNET_SCHEDULER_NO_TASK != sc->upload_task)
GNUNET_SCHEDULER_cancel (sc->h->sched, sc->upload_task);
+ else
+ GNUNET_assert (sc->all_done == GNUNET_YES);
// FIXME: remove from persistence DB (?) --- think more about
// shutdown / persistent-resume APIs!!!
GNUNET_FS_file_information_inspect (sc->fi,
Modified: gnunet/src/fs/fs_tree.c
===================================================================
--- gnunet/src/fs/fs_tree.c 2009-10-18 20:23:04 UTC (rev 9177)
+++ gnunet/src/fs/fs_tree.c 2009-10-18 20:23:21 UTC (rev 9178)
@@ -171,6 +171,7 @@
{
struct GNUNET_FS_TreeEncoder *te;
+ GNUNET_assert (size > 0);
te = GNUNET_malloc (sizeof (struct GNUNET_FS_TreeEncoder));
te->h = h;
te->size = size;
Modified: gnunet/src/fs/test_fs_download.c
===================================================================
--- gnunet/src/fs/test_fs_download.c 2009-10-18 20:23:04 UTC (rev 9177)
+++ gnunet/src/fs/test_fs_download.c 2009-10-18 20:23:21 UTC (rev 9178)
@@ -69,6 +69,24 @@
static char *fn;
+static void
+abort_download_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ GNUNET_FS_download_stop (download, GNUNET_YES);
+ download = NULL;
+}
+
+
+static void
+abort_publish_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ GNUNET_FS_publish_stop (publish);
+ publish = NULL;
+}
+
+
static void *
progress_cb (void *cls,
const struct GNUNET_FS_ProgressInfo *event)
@@ -76,14 +94,8 @@
switch (event->status)
{
- case GNUNET_FS_STATUS_DOWNLOAD_SUSPEND:
- GNUNET_break (0);
- break;
- case GNUNET_FS_STATUS_DOWNLOAD_RESUME:
- GNUNET_break (0);
- break;
case GNUNET_FS_STATUS_PUBLISH_PROGRESS:
-#if DEBUG_VERBOSE > 1
+#if DEBUG_VERBOSE
printf ("Publish is progressing (%llu/%llu)...\n",
(unsigned long long) event->value.publish.completed,
(unsigned long long) event->value.publish.size);
@@ -115,35 +127,39 @@
download = NULL;
break;
case GNUNET_FS_STATUS_DOWNLOAD_PROGRESS:
-#if DEBUG_VERBOSE > 1
+#if DEBUG_VERBOSE
printf ("Download is progressing (%llu/%llu)...\n",
(unsigned long long) event->value.download.completed,
(unsigned long long) event->value.download.size);
#endif
break;
- case GNUNET_FS_STATUS_UNINDEX_PROGRESS:
+ case GNUNET_FS_STATUS_PUBLISH_ERROR:
+ fprintf (stderr,
+ "Error publishing file: %s\n",
+ event->value.publish.specifics.error.message);
GNUNET_break (0);
+ GNUNET_SCHEDULER_add_continuation (sched,
+ GNUNET_NO,
+ &abort_publish_task,
+ NULL,
+ GNUNET_SCHEDULER_REASON_PREREQ_DONE);
break;
- case GNUNET_FS_STATUS_UNINDEX_COMPLETED:
- GNUNET_break (0);
- break;
- case GNUNET_FS_STATUS_UNINDEX_ERROR:
- GNUNET_break (0);
- case GNUNET_FS_STATUS_PUBLISH_ERROR:
- GNUNET_break (0);
case GNUNET_FS_STATUS_DOWNLOAD_ERROR:
- GNUNET_break (0);
+ fprintf (stderr,
+ "Error downloading file: %s\n",
+ event->value.download.specifics.error.message);
+ GNUNET_SCHEDULER_add_continuation (sched,
+ GNUNET_NO,
+ &abort_download_task,
+ NULL,
+ GNUNET_SCHEDULER_REASON_PREREQ_DONE);
break;
- case GNUNET_FS_STATUS_UNINDEX_SUSPEND:
- GNUNET_break (0);
- break;
- case GNUNET_FS_STATUS_PUBLISH_SUSPEND:
- GNUNET_break (0);
- break;
case GNUNET_FS_STATUS_PUBLISH_START:
/* FIXME: add checks here... */
+ break;
case GNUNET_FS_STATUS_PUBLISH_STOPPED:
/* FIXME: add checks here... */
+ break;
case GNUNET_FS_STATUS_DOWNLOAD_START:
/* FIXME: add checks here... */
break;
@@ -152,12 +168,6 @@
GNUNET_FS_stop (fs);
fs = NULL;
break;
- case GNUNET_FS_STATUS_UNINDEX_START:
- GNUNET_break (0);
- break;
- case GNUNET_FS_STATUS_UNINDEX_STOPPED:
- GNUNET_break (0);
- break;
default:
printf ("Unexpected event: %d\n",
event->status);
Modified: gnunet/src/fs/test_fs_download_data.conf
===================================================================
--- gnunet/src/fs/test_fs_download_data.conf 2009-10-18 20:23:04 UTC (rev
9177)
+++ gnunet/src/fs/test_fs_download_data.conf 2009-10-18 20:23:21 UTC (rev
9178)
@@ -16,6 +16,7 @@
[arm]
PORT = 42466
HOSTNAME = localhost
+DEFAULTSERVICES = resolver datastore transport core fs
[statistics]
PORT = 42467
Modified: gnunet/src/include/gnunet_fs_service.h
===================================================================
--- gnunet/src/include/gnunet_fs_service.h 2009-10-18 20:23:04 UTC (rev
9177)
+++ gnunet/src/include/gnunet_fs_service.h 2009-10-18 20:23:21 UTC (rev
9178)
@@ -1902,6 +1902,7 @@
* Stop an upload. Will abort incomplete uploads (but
* not remove blocks that have already been publishd) or
* simply clean up the state for completed uploads.
+ * Must NOT be called from within the event callback!
*
* @param sc context for the upload to stop
*/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r9178 - in gnunet/src: fs include,
gnunet <=