don't run set with valgrind per default
[oweals/gnunet.git] / src / conversation / test_conversation_api_twocalls.c
index 7969bee270582c902bfc23f31d2cd00f50406451..7d2705e705ee94ab2e77663123ffb5cfe213aaf3 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2013 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2013 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -73,7 +73,9 @@ static GNUNET_MICROPHONE_RecordedDataCallback phone_rdc;
 
 static void *phone_rdc_cls;
 
-static struct GNUNET_SCHEDULER_Task * phone_task;
+static struct GNUNET_SCHEDULER_Task *phone_task;
+
+static struct GNUNET_SCHEDULER_Task *timeout_task;
 
 /**
  * Variable for recognizing caller1
@@ -124,8 +126,7 @@ static struct MicContext call2_mic_ctx;
 
 
 static void
-phone_send (void *cls,
-            const struct GNUNET_SCHEDULER_TaskContext *tc)
+phone_send (void *cls)
 {
   char buf[32];
 
@@ -138,8 +139,7 @@ phone_send (void *cls,
 
 
 static void
-call_send (void *cls,
-           const struct GNUNET_SCHEDULER_TaskContext *tc)
+call_send (void *cls)
 {
   struct MicContext *mc = cls;
   char buf[32];
@@ -187,7 +187,8 @@ play (void *cls,
     phone_i++;
   else
   {
-    LOG_DEBUG ("Received unexpected data %.*s\n",
+    LOG_DEBUG ("Received %u bytes of unexpected data `%.*s'\n",
+               (unsigned int) data_size,
                (int) data_size,
                (const char *) data);
   }
@@ -340,15 +341,33 @@ static struct GNUNET_MICROPHONE_Handle phone_mic = {
 
 
 /**
- * Signature of the main function of a task.
+ * Function run on timeout.
  *
  * @param cls closure
- * @param tc context information (why was this task triggered now)
  */
 static void
-end_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+end_test (void *cls)
 {
+  timeout_task = NULL;
+  fprintf (stderr,
+           "Timeout!\n");
   GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Function run on shutdown.
+ *
+ * @param cls closure
+ */
+static void
+do_shutdown (void *cls)
+{
+  if (NULL != timeout_task)
+  {
+    GNUNET_SCHEDULER_cancel (timeout_task);
+    timeout_task = NULL;
+  }
   if (NULL != op)
   {
     GNUNET_IDENTITY_cancel (op);
@@ -488,6 +507,11 @@ call_event_handler (void *cls,
     break;
   case GNUNET_CONVERSATION_EC_CALL_ERROR:
     GNUNET_break (0);
+    if (0 == strcmp (cid, "call1"))
+      call1 = NULL;
+    else
+      call2 = NULL;
+    GNUNET_SCHEDULER_shutdown ();
     break;
   }
 }
@@ -595,8 +619,11 @@ run (void *cls,
      struct GNUNET_TESTING_Peer *peer)
 {
   cfg = c;
-  GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test,
-                                NULL);
+  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                               &end_test,
+                                               NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                 NULL);
   id = GNUNET_IDENTITY_connect (cfg,
                                 &identity_cb,
                                 NULL);