[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r9424 - in gnunet/src: core datastore fs include transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r9424 - in gnunet/src: core datastore fs include transport util |
Date: |
Sun, 8 Nov 2009 14:04:18 -0700 |
Author: grothoff
Date: 2009-11-08 14:04:18 -0700 (Sun, 08 Nov 2009)
New Revision: 9424
Modified:
gnunet/src/core/test_core_api.c
gnunet/src/datastore/test_datastore_api_management.c
gnunet/src/fs/fs_file_information.c
gnunet/src/fs/fs_tree.c
gnunet/src/fs/test_fs_download.c
gnunet/src/fs/test_fs_list_indexed.c
gnunet/src/fs/test_fs_publish.c
gnunet/src/fs/test_fs_search.c
gnunet/src/fs/test_fs_unindex.c
gnunet/src/include/gnunet_client_lib.h
gnunet/src/transport/test_transport_api.c
gnunet/src/util/client.c
Log:
reducing leaks, fixing shutdown bug, increasing timeouts
Modified: gnunet/src/core/test_core_api.c
===================================================================
--- gnunet/src/core/test_core_api.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/core/test_core_api.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -42,7 +42,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
#define MTYPE 12345
Modified: gnunet/src/datastore/test_datastore_api_management.c
===================================================================
--- gnunet/src/datastore/test_datastore_api_management.c 2009-11-08
21:00:00 UTC (rev 9423)
+++ gnunet/src/datastore/test_datastore_api_management.c 2009-11-08
21:04:18 UTC (rev 9424)
@@ -33,7 +33,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* Number of iterations to run; must be large enough
Modified: gnunet/src/fs/fs_file_information.c
===================================================================
--- gnunet/src/fs/fs_file_information.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/fs_file_information.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -32,6 +32,7 @@
#include <extractor.h>
#include "gnunet_fs_service.h"
#include "fs.h"
+#include "fs_tree.h"
/**
@@ -849,6 +850,12 @@
GNUNET_FS_uri_destroy (fi->keywords);
GNUNET_CONTAINER_meta_data_destroy (fi->meta);
GNUNET_free_non_null (fi->serialization);
+ if (fi->te != NULL)
+ {
+ GNUNET_FS_tree_encoder_finish (fi->te,
+ NULL, NULL);
+ fi->te = NULL;
+ }
GNUNET_free (fi);
}
Modified: gnunet/src/fs/fs_tree.c
===================================================================
--- gnunet/src/fs/fs_tree.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/fs_tree.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -385,8 +385,15 @@
struct GNUNET_FS_Uri **uri,
char **emsg)
{
- *uri = te->uri;
- *emsg = te->emsg;
+ if (uri != NULL)
+ *uri = te->uri;
+ else
+ if (NULL != te->uri)
+ GNUNET_FS_uri_destroy (te->uri);
+ if (emsg != NULL)
+ *emsg = te->emsg;
+ else
+ GNUNET_free_non_null (te->emsg);
GNUNET_free (te->chk_tree);
GNUNET_free (te);
}
Modified: gnunet/src/fs/test_fs_download.c
===================================================================
--- gnunet/src/fs/test_fs_download.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/test_fs_download.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -41,7 +41,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* How long should our test-content live?
Modified: gnunet/src/fs/test_fs_list_indexed.c
===================================================================
--- gnunet/src/fs/test_fs_list_indexed.c 2009-11-08 21:00:00 UTC (rev
9423)
+++ gnunet/src/fs/test_fs_list_indexed.c 2009-11-08 21:04:18 UTC (rev
9424)
@@ -45,7 +45,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* How long should our test-content live?
Modified: gnunet/src/fs/test_fs_publish.c
===================================================================
--- gnunet/src/fs/test_fs_publish.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/test_fs_publish.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -42,7 +42,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* How long should our test-content live?
Modified: gnunet/src/fs/test_fs_search.c
===================================================================
--- gnunet/src/fs/test_fs_search.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/test_fs_search.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -41,7 +41,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* How long should our test-content live?
Modified: gnunet/src/fs/test_fs_unindex.c
===================================================================
--- gnunet/src/fs/test_fs_unindex.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/fs/test_fs_unindex.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -41,7 +41,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
/**
* How long should our test-content live?
Modified: gnunet/src/include/gnunet_client_lib.h
===================================================================
--- gnunet/src/include/gnunet_client_lib.h 2009-11-08 21:00:00 UTC (rev
9423)
+++ gnunet/src/include/gnunet_client_lib.h 2009-11-08 21:04:18 UTC (rev
9424)
@@ -70,7 +70,8 @@
* transmission request will also be cancelled UNLESS the callback for
* the transmission request has already been called, in which case the
* transmission is guaranteed to complete before the socket is fully
- * destroyed.
+ * destroyed (unless, of course, there is an error with the server
+ * in which case the message may still be lost).
*
* @param sock handle to the service connection
*/
Modified: gnunet/src/transport/test_transport_api.c
===================================================================
--- gnunet/src/transport/test_transport_api.c 2009-11-08 21:00:00 UTC (rev
9423)
+++ gnunet/src/transport/test_transport_api.c 2009-11-08 21:04:18 UTC (rev
9424)
@@ -40,7 +40,7 @@
/**
* How long until we give up on transmitting the message?
*/
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
#define MTYPE 12345
Modified: gnunet/src/util/client.c
===================================================================
--- gnunet/src/util/client.c 2009-11-08 21:00:00 UTC (rev 9423)
+++ gnunet/src/util/client.c 2009-11-08 21:04:18 UTC (rev 9424)
@@ -72,15 +72,15 @@
struct GNUNET_CONNECTION_TransmitHandle *th;
/**
- * Timeout.
+ * If we are re-trying and are delaying to do so,
+ * handle to the scheduled task managing the delay.
*/
- struct GNUNET_TIME_Absolute timeout;
+ GNUNET_SCHEDULER_TaskIdentifier reconnect_task;
/**
- * If we are re-trying and are delaying to do so,
- * handle to the scheduled task managing the delay.
+ * Timeout.
*/
- GNUNET_SCHEDULER_TaskIdentifier task;
+ struct GNUNET_TIME_Absolute timeout;
/**
* Number of bytes requested.
@@ -104,7 +104,40 @@
};
+/**
+ * Context for processing
+ * "GNUNET_CLIENT_transmit_and_get_response" requests.
+ */
+struct TransmitGetResponseContext
+{
+ /**
+ * Client handle.
+ */
+ struct GNUNET_CLIENT_Connection *sock;
+ /**
+ * Message to transmit; do not free, allocated
+ * right after this struct.
+ */
+ const struct GNUNET_MessageHeader *hdr;
+
+ /**
+ * Timeout to use.
+ */
+ struct GNUNET_TIME_Absolute timeout;
+
+ /**
+ * Function to call when done.
+ */
+ GNUNET_CLIENT_MessageHandler rn;
+
+ /**
+ * Closure for "rn".
+ */
+ void *rn_cls;
+};
+
+
/**
* Struct to refer to a GNUnet TCP connection.
* This is more than just a socket because if the server
@@ -135,6 +168,12 @@
char *service_name;
/**
+ * Context of a transmit_and_get_response operation, NULL
+ * if no such operation is pending.
+ */
+ struct TransmitGetResponseContext *tag;
+
+ /**
* Handler for current receiver task.
*/
GNUNET_CLIENT_MessageHandler receiver_handler;
@@ -156,6 +195,12 @@
GNUNET_SCHEDULER_Task test_cb;
/**
+ * If we are re-trying and are delaying to do so,
+ * handle to the scheduled task managing the delay.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier receive_task;
+
+ /**
* Closure for test_cb (NULL unless in service_test)
*/
void *test_cb_cls;
@@ -187,9 +232,7 @@
/**
* Are we currently busy doing receive-processing?
- * GNUNET_YES if so, GNUNET_NO if not, GNUNET_SYSERR
- * if the handle should be destroyed as soon as the
- * receive processing is done.
+ * GNUNET_YES if so, GNUNET_NO if not.
*/
int in_receive;
@@ -269,31 +312,14 @@
/**
- * Receiver task has completed, free rest of client
- * data structures.
- */
-static void
-finish_cleanup (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- struct GNUNET_CLIENT_Connection *sock = cls;
-
- if (sock->th != NULL)
- GNUNET_CLIENT_notify_transmit_ready_cancel (sock->th);
- GNUNET_array_grow (sock->received_buf, sock->received_size, 0);
- GNUNET_free (sock->service_name);
- GNUNET_CONFIGURATION_destroy (sock->cfg);
- GNUNET_free (sock);
-}
-
-
-/**
* Destroy connection with the service. This will automatically
* cancel any pending "receive" request (however, the handler will
* *NOT* be called, not even with a NULL message). Any pending
* transmission request will also be cancelled UNLESS the callback for
* the transmission request has already been called, in which case the
* transmission is guaranteed to complete before the socket is fully
- * destroyed.
+ * destroyed (unless, of course, there is an error with the server
+ * in which case the message may still be lost).
*
* @param sock handle to the service connection
*/
@@ -301,15 +327,31 @@
GNUNET_CLIENT_disconnect (struct GNUNET_CLIENT_Connection *sock)
{
GNUNET_assert (sock->sock != NULL);
+ if (sock->in_receive == GNUNET_YES)
+ {
+ GNUNET_CONNECTION_receive_cancel (sock->sock);
+ sock->in_receive = GNUNET_NO;
+ }
GNUNET_CONNECTION_destroy (sock->sock);
sock->sock = NULL;
+ if (sock->tag != NULL)
+ {
+ GNUNET_free (sock->tag);
+ sock->tag = NULL;
+ }
sock->receiver_handler = NULL;
- if (sock->in_receive == GNUNET_YES)
- sock->in_receive = GNUNET_SYSERR;
- else
- GNUNET_SCHEDULER_add_after (sock->sched,
- GNUNET_SCHEDULER_NO_TASK,
- &finish_cleanup, sock);
+ if (sock->th != NULL)
+ GNUNET_CLIENT_notify_transmit_ready_cancel (sock->th);
+ if (sock->receive_task != GNUNET_SCHEDULER_NO_TASK)
+ {
+ GNUNET_SCHEDULER_cancel (sock->sched,
+ sock->receive_task);
+ sock->receive_task = GNUNET_SCHEDULER_NO_TASK;
+ }
+ GNUNET_array_grow (sock->received_buf, sock->received_size, 0);
+ GNUNET_free (sock->service_name);
+ GNUNET_CONFIGURATION_destroy (sock->cfg);
+ GNUNET_free (sock);
}
@@ -349,10 +391,6 @@
struct GNUNET_TIME_Relative remaining;
GNUNET_assert (conn->msg_complete == GNUNET_NO);
- if (GNUNET_SYSERR == conn->in_receive)
- GNUNET_SCHEDULER_add_after (conn->sched,
- GNUNET_SCHEDULER_NO_TASK,
- &finish_cleanup, conn);
conn->in_receive = GNUNET_NO;
if ((available == 0) || (conn->sock == NULL) || (errCode != 0))
{
@@ -393,24 +431,23 @@
/**
* Continuation to call the receive callback.
+ *
+ * @param cls our handle to the client connection
+ * @param tc scheduler context
*/
static void
-receive_task (void *scls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+receive_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
- struct GNUNET_CLIENT_Connection *sock = scls;
+ struct GNUNET_CLIENT_Connection *sock = cls;
GNUNET_CLIENT_MessageHandler handler = sock->receiver_handler;
const struct GNUNET_MessageHeader *cmsg =
(const struct GNUNET_MessageHeader *) sock->received_buf;
- void *cls = sock->receiver_handler_cls;
+ void *handler_cls = sock->receiver_handler_cls;
uint16_t msize = ntohs (cmsg->size);
char mbuf[msize];
struct GNUNET_MessageHeader *msg = (struct GNUNET_MessageHeader *) mbuf;
- if (GNUNET_SYSERR == sock->in_receive)
- GNUNET_SCHEDULER_add_after (sock->sched,
- GNUNET_SCHEDULER_NO_TASK,
- &finish_cleanup, sock);
- sock->in_receive = GNUNET_NO;
+ sock->receive_task = GNUNET_SCHEDULER_NO_TASK;
GNUNET_assert (GNUNET_YES == sock->msg_complete);
GNUNET_assert (sock->received_pos >= msize);
memcpy (msg, cmsg, msize);
@@ -421,7 +458,7 @@
sock->receiver_handler = NULL;
check_complete (sock);
if (handler != NULL)
- handler (cls, msg);
+ handler (handler_cls, msg);
}
@@ -448,15 +485,19 @@
sock->receiver_handler = handler;
sock->receiver_handler_cls = handler_cls;
sock->receive_timeout = GNUNET_TIME_relative_to_absolute (timeout);
- sock->in_receive = GNUNET_YES;
if (GNUNET_YES == sock->msg_complete)
- GNUNET_SCHEDULER_add_after (sock->sched,
- GNUNET_SCHEDULER_NO_TASK,
- &receive_task, sock);
+ {
+ sock->receive_task = GNUNET_SCHEDULER_add_after (sock->sched,
+ GNUNET_SCHEDULER_NO_TASK,
+ &receive_task, sock);
+ }
else
- GNUNET_CONNECTION_receive (sock->sock,
- GNUNET_SERVER_MAX_MESSAGE_SIZE,
- timeout, &receive_helper, sock);
+ {
+ sock->in_receive = GNUNET_YES;
+ GNUNET_CONNECTION_receive (sock->sock,
+ GNUNET_SERVER_MAX_MESSAGE_SIZE,
+ timeout, &receive_helper, sock);
+ }
}
@@ -657,7 +698,7 @@
{
struct GNUNET_CLIENT_TransmitHandle *th = cls;
- th->task = GNUNET_SCHEDULER_NO_TASK;
+ th->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
{
#if DEBUG_CLIENT
@@ -733,9 +774,9 @@
MAX_ATTEMPTS - th->attempts_left,
(unsigned long long) delay.value);
#endif
- th->task = GNUNET_SCHEDULER_add_delayed (th->sock->sched,
- delay,
- &client_delayed_retry, th);
+ th->reconnect_task = GNUNET_SCHEDULER_add_delayed (th->sock->sched,
+ delay,
+ &client_delayed_retry,
th);
th->sock->th = th;
return 0;
}
@@ -809,10 +850,11 @@
GNUNET_CLIENT_notify_transmit_ready_cancel (struct
GNUNET_CLIENT_TransmitHandle *th)
{
- if (th->task != GNUNET_SCHEDULER_NO_TASK)
+ if (th->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
{
GNUNET_break (NULL == th->th);
- GNUNET_SCHEDULER_cancel (th->sock->sched, th->task);
+ GNUNET_SCHEDULER_cancel (th->sock->sched, th->reconnect_task);
+ th->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
}
else
{
@@ -825,46 +867,12 @@
/**
- * Context for processing
- * "GNUNET_CLIENT_transmit_and_get_response" requests.
- */
-struct TARCtx
-{
- /**
- * Client handle.
- */
- struct GNUNET_CLIENT_Connection *sock;
-
- /**
- * Message to transmit; do not free, allocated
- * right after this struct.
- */
- const struct GNUNET_MessageHeader *hdr;
-
- /**
- * Timeout to use.
- */
- struct GNUNET_TIME_Absolute timeout;
-
- /**
- * Function to call when done.
- */
- GNUNET_CLIENT_MessageHandler rn;
-
- /**
- * Closure for "rn".
- */
- void *rn_cls;
-};
-
-
-/**
* Function called to notify a client about the socket
* begin ready to queue the message. "buf" will be
* NULL and "size" zero if the socket was closed for
* writing in the meantime.
*
- * @param cls closure of type "struct TARCtx*"
+ * @param cls closure of type "struct TransmitGetResponseContext*"
* @param size number of bytes available in buf
* @param buf where the callee should write the message
* @return number of bytes written to buf
@@ -872,9 +880,10 @@
static size_t
transmit_for_response (void *cls, size_t size, void *buf)
{
- struct TARCtx *tc = cls;
+ struct TransmitGetResponseContext *tc = cls;
uint16_t msize;
+ tc->sock->tag = NULL;
msize = ntohs (tc->hdr->size);
if (NULL == buf)
{
@@ -924,13 +933,14 @@
GNUNET_CLIENT_MessageHandler rn,
void *rn_cls)
{
- struct TARCtx *tc;
+ struct TransmitGetResponseContext *tc;
uint16_t msize;
if (NULL != sock->th)
return GNUNET_SYSERR;
+ GNUNET_assert (sock->tag == NULL);
msize = ntohs (hdr->size);
- tc = GNUNET_malloc (sizeof (struct TARCtx) + msize);
+ tc = GNUNET_malloc (sizeof (struct TransmitGetResponseContext) + msize);
tc->sock = sock;
tc->hdr = (const struct GNUNET_MessageHeader *) &tc[1];
memcpy (&tc[1], hdr, msize);
@@ -948,6 +958,7 @@
GNUNET_free (tc);
return GNUNET_SYSERR;
}
+ sock->tag = tc;
return GNUNET_OK;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r9424 - in gnunet/src: core datastore fs include transport util,
gnunet <=