fix memleak
[oweals/gnunet.git] / src / stream / test_stream_sequence_wraparound.c
index ffd2eb5fb43d7d9612329c0c8e2429493dc8059b..f231716614dfddafff3fc101ee6dff245f147279 100644 (file)
@@ -95,7 +95,8 @@ static int result;
 static void
 do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  GNUNET_STREAM_close (peer1.socket);
+  if (NULL != peer1.socket)
+    GNUNET_STREAM_close (peer1.socket);
   if (NULL != peer2.socket)
     GNUNET_STREAM_close (peer2.socket);
   if (NULL != peer2_listen_socket)
@@ -142,7 +143,7 @@ write_completion (void *cls,
 
   peer = (struct PeerData *) cls;
   GNUNET_assert (GNUNET_STREAM_OK == status);
-  GNUNET_assert (size < DATA_SIZE);
+  GNUNET_assert (size <= DATA_SIZE);
   peer->bytes_wrote += size;
 
   if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */
@@ -301,6 +302,14 @@ stream_listen_cb (void *cls,
            struct GNUNET_STREAM_Socket *socket,
            const struct GNUNET_PeerIdentity *initiator)
 {
+  if ((NULL == socket) || (NULL == initiator))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Binding error\n");
+    if (GNUNET_SCHEDULER_NO_TASK != abort_task)
+      GNUNET_SCHEDULER_cancel (abort_task);
+    abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
+    return GNUNET_OK;
+  }
   GNUNET_assert (NULL != socket);
   GNUNET_assert (socket != peer1.socket);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -313,28 +322,23 @@ stream_listen_cb (void *cls,
 
 
 /**
- * Task for connecting the peer to stream as client
- *
- * @param cls PeerData
- * @param tc the TaskContext
+ * Listen success callback; connects a peer to stream as client
  */
 static void
-stream_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+stream_connect (void)
 {
-  struct PeerData *peer = cls;
-
-  GNUNET_assert (&peer1 == peer);
-  /* Connect to stream */
-  peer->socket = GNUNET_STREAM_open (config,
-                                     &self_id,         /* Null for local peer? */
-                                     10,           /* App port */
-                                     &stream_open_cb,
-                                     &peer1,
-                                     GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER,
-                                     UINT32_MAX - GNUNET_CRYPTO_random_u32
-                                     (GNUNET_CRYPTO_QUALITY_WEAK, 64),
-                                     GNUNET_STREAM_OPTION_END);
-  GNUNET_assert (NULL != peer->socket);
+  peer1.socket = 
+    GNUNET_STREAM_open (config,
+                        &self_id,         /* Null for local peer? */
+                        10,           /* App port */
+                        &stream_open_cb,
+                        &peer1,
+                        GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER,
+                        UINT32_MAX - GNUNET_CRYPTO_random_u32
+                        (GNUNET_CRYPTO_QUALITY_WEAK, 64),
+                       GNUNET_STREAM_OPTION_MAX_PAYLOAD_SIZE, 500,
+                        GNUNET_STREAM_OPTION_END);
+  GNUNET_assert (NULL != peer1.socket);
 }
 
 
@@ -349,15 +353,17 @@ run (void *cls,
   config = cfg;
   self = peer;
   (void) GNUNET_TESTING_peer_get_identity (peer, &self_id);
-  peer2_listen_socket = GNUNET_STREAM_listen (config,
-                                              10, /* App port */
-                                              &stream_listen_cb,
-                                              NULL,
-                                              GNUNET_STREAM_OPTION_LISTEN_TIMEOUT,
-                                              30 * 1000,
-                                              GNUNET_STREAM_OPTION_END);
+  peer2_listen_socket = 
+    GNUNET_STREAM_listen (config,
+                          10, /* App port */
+                          &stream_listen_cb,
+                          NULL,
+                          GNUNET_STREAM_OPTION_LISTEN_TIMEOUT,
+                          60 * 1000,
+                          GNUNET_STREAM_OPTION_SIGNAL_LISTEN_SUCCESS,
+                          &stream_connect,
+                          GNUNET_STREAM_OPTION_END);
   GNUNET_assert (NULL != peer2_listen_socket);
-  GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS(10), &stream_connect, &peer1);
   abort_task =
     GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
                                   (GNUNET_TIME_UNIT_SECONDS, 100), &do_abort,