gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r26630 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r26630 - gnunet/src/testbed
Date: Thu, 28 Mar 2013 13:05:37 +0100

Author: harsha
Date: 2013-03-28 13:05:37 +0100 (Thu, 28 Mar 2013)
New Revision: 26630

Modified:
   gnunet/src/testbed/testbed_api.c
   gnunet/src/testbed/testbed_api_peers.c
Log:
- fix DLL removals while cleaning up operation contexts

Modified: gnunet/src/testbed/testbed_api.c
===================================================================
--- gnunet/src/testbed/testbed_api.c    2013-03-28 11:56:33 UTC (rev 26629)
+++ gnunet/src/testbed/testbed_api.c    2013-03-28 12:05:37 UTC (rev 26630)
@@ -532,8 +532,7 @@
     return GNUNET_YES;
   }
   GNUNET_assert (OP_OVERLAY_CONNECT == opc->type);
-  data = opc->data;
-  GNUNET_assert (NULL != data);
+  GNUNET_assert (NULL != (data = opc->data));
   GNUNET_assert ((ntohl (msg->peer1) == data->p1->unique_id) &&
                  (ntohl (msg->peer2) == data->p2->unique_id));
   event.type = (enum GNUNET_TESTBED_EventType) ntohl (msg->event_type);
@@ -815,8 +814,6 @@
     GNUNET_break (0);
     return GNUNET_YES;
   }
-  GNUNET_free (opc->data);
-  opc->data = NULL;
   opc->state = OPC_STATE_FINISHED;
   GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
   if ((0 != (GNUNET_TESTBED_ET_OPERATION_FINISHED & c->event_mask)) &&
@@ -873,12 +870,13 @@
     GNUNET_break (0);
     return GNUNET_YES;
   }
-  data = opc->data;
-  GNUNET_assert (NULL != data);
+  GNUNET_assert (NULL != (data = opc->data));
   host = GNUNET_TESTBED_host_lookup_by_id_ (data->host_id);
   GNUNET_assert (NULL != host);
   GNUNET_free (data);
   opc->data = NULL;
+  opc->state = OPC_STATE_FINISHED;
+  GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
   event.type = GNUNET_TESTBED_ET_OPERATION_FINISHED;
   event.op = opc->op;
   event.op_cls = opc->op_cls;
@@ -905,8 +903,6 @@
       GNUNET_TESTBED_host_replace_cfg_ (host, cfg);
     }
   }
-  GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
-  opc->state = OPC_STATE_FINISHED;
   if (0 != (c->event_mask & (1L << GNUNET_TESTBED_ET_OPERATION_FINISHED)))
   {
     if (NULL != c->cc)
@@ -1218,7 +1214,7 @@
   switch (opc->state)
   {
   case OPC_STATE_INIT:
-    GNUNET_free (data->msg);
+    GNUNET_free (data->msg);    
     break;
   case OPC_STATE_STARTED:
     GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
@@ -1240,11 +1236,14 @@
 opstart_get_slave_config (void *cls)
 {
   struct OperationContext *opc = cls;
-  struct GetSlaveConfigData *data;
+  struct GetSlaveConfigData *data = opc->data;
   struct GNUNET_TESTBED_SlaveGetConfigurationMessage *msg;
 
-  data = opc->data;
+  GNUNET_assert (NULL != data);
   msg = GNUNET_TESTBED_generate_slavegetconfig_msg_ (opc->id, data->slave_id);
+  GNUNET_free (opc->data);
+  data = NULL;
+  opc->data = NULL;
   GNUNET_CONTAINER_DLL_insert_tail (opc->c->ocq_head, opc->c->ocq_tail, opc);
   GNUNET_TESTBED_queue_message_ (opc->c, &msg->header);
   opc->state = OPC_STATE_STARTED;
@@ -1267,7 +1266,6 @@
     GNUNET_free (opc->data);
     break;
   case OPC_STATE_STARTED:
-    GNUNET_free (opc->data);
     GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
     break;
   case OPC_STATE_FINISHED:

Modified: gnunet/src/testbed/testbed_api_peers.c
===================================================================
--- gnunet/src/testbed/testbed_api_peers.c      2013-03-28 11:56:33 UTC (rev 
26629)
+++ gnunet/src/testbed/testbed_api_peers.c      2013-03-28 12:05:37 UTC (rev 
26630)
@@ -105,9 +105,8 @@
   size_t xc_size;
   uint16_t msize;
 
-  GNUNET_assert (OP_PEER_CREATE == opc->type);
-  data = opc->data;
-  GNUNET_assert (NULL != data);
+  GNUNET_assert (OP_PEER_CREATE == opc->type);  
+  GNUNET_assert (NULL != (data = opc->data));
   GNUNET_assert (NULL != data->peer);
   opc->state = OPC_STATE_STARTED;
   config = GNUNET_CONFIGURATION_serialize (data->cfg, &c_size);
@@ -166,8 +165,7 @@
   struct GNUNET_TESTBED_PeerDestroyMessage *msg;
 
   GNUNET_assert (OP_PEER_DESTROY == opc->type);
-  peer = opc->data;
-  GNUNET_assert (NULL != peer);
+  GNUNET_assert (NULL != (peer = opc->data));
   opc->state = OPC_STATE_STARTED;
   msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage));
   msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage));
@@ -189,8 +187,16 @@
 {
   struct OperationContext *opc = cls;
 
-  if (OPC_STATE_FINISHED != opc->state)
+  switch (opc->state)
+  {
+  case OPC_STATE_STARTED:
     GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+    /* no break; continue */
+  case OPC_STATE_INIT:
+    break;
+  case OPC_STATE_FINISHED:
+    break;
+  }
   GNUNET_free (opc);
 }
 
@@ -209,10 +215,8 @@
   struct GNUNET_TESTBED_Peer *peer;
 
   GNUNET_assert (OP_PEER_START == opc->type);
-  GNUNET_assert (NULL != opc->data);
-  data = opc->data;
-  GNUNET_assert (NULL != data->peer);
-  peer = data->peer;
+  GNUNET_assert (NULL != (data = opc->data));
+  GNUNET_assert (NULL != (peer = data->peer));
   GNUNET_assert ((PS_CREATED == peer->state) || (PS_STOPPED == peer->state));
   opc->state = OPC_STATE_STARTED;
   msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStartMessage));
@@ -235,10 +239,16 @@
 {
   struct OperationContext *opc = cls;
 
-  if (OPC_STATE_FINISHED != opc->state)
+  switch (opc->state)
   {
+  case OPC_STATE_STARTED:
+    GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+    /* no break; continue */
+  case OPC_STATE_INIT:
     GNUNET_free (opc->data);
-    GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+    break;
+  case OPC_STATE_FINISHED:
+    break;
   }
   GNUNET_free (opc);
 }
@@ -257,10 +267,8 @@
   struct PeerEventData *data;
   struct GNUNET_TESTBED_Peer *peer;
 
-  GNUNET_assert (NULL != opc->data);
-  data = opc->data;
-  GNUNET_assert (NULL != data->peer);
-  peer = data->peer;
+  GNUNET_assert (NULL != (data = opc->data));
+  GNUNET_assert (NULL != (peer = data->peer));
   GNUNET_assert (PS_STARTED == peer->state);
   opc->state = OPC_STATE_STARTED;
   msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStopMessage));
@@ -283,10 +291,16 @@
 {
   struct OperationContext *opc = cls;
 
-  if (OPC_STATE_FINISHED != opc->state)
+  switch (opc->state)
   {
+  case OPC_STATE_STARTED:
+    GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+    /* no break; continue */
+  case OPC_STATE_INIT:
     GNUNET_free (opc->data);
-    GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+    break;
+  case OPC_STATE_FINISHED:
+    break;
   }
   GNUNET_free (opc);
 }
@@ -330,8 +344,7 @@
   struct PeerInfoData *data;
   struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg;
 
-  data = opc->data;
-  GNUNET_assert (NULL != data);
+  GNUNET_assert (NULL != (data = opc->data));
   opc->state = OPC_STATE_STARTED;
   msg =
       GNUNET_TESTBED_generate_peergetconfig_msg_ (data->peer->unique_id,
@@ -352,19 +365,21 @@
   struct OperationContext *opc = cls;
   struct GNUNET_TESTBED_PeerInformation *data;
 
-  if (OPC_STATE_FINISHED != opc->state)
+  switch (opc->state)
   {
-    GNUNET_free_non_null (opc->data);
+  case OPC_STATE_STARTED:
     GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
-  }
-  else
-  {
-    data = opc->data;
-    GNUNET_assert (NULL != data);
+    /* no break; continue */
+  case OPC_STATE_INIT:
+    GNUNET_free (opc->data);
+    break;
+  case OPC_STATE_FINISHED:
+    GNUNET_assert (NULL != (data = opc->data));
     switch (data->pit)
     {
     case GNUNET_TESTBED_PIT_CONFIGURATION:
-      GNUNET_CONFIGURATION_destroy (data->result.cfg);
+      if (NULL != data->result.cfg)
+        GNUNET_CONFIGURATION_destroy (data->result.cfg);
       break;
     case GNUNET_TESTBED_PIT_IDENTITY:
       GNUNET_free (data->result.id);
@@ -373,6 +388,7 @@
       GNUNET_assert (0);        /* We should never reach here */
     }
     GNUNET_free (data);
+    break;
   }
   GNUNET_free (opc);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]