aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-04-19 15:11:54 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-04-19 15:11:54 +0000
commit20f538f06d2852ddaad7f6f631eede8c39234da4 (patch)
tree0a0d743950b130d972f4f734d80f5307198e5547 /src/ats
parent9dfda11d4fba38cbf2cf23c9acdf2c31eebbc72e (diff)
downloadgnunet-20f538f06d2852ddaad7f6f631eede8c39234da4.tar.gz
gnunet-20f538f06d2852ddaad7f6f631eede8c39234da4.zip
- fixes
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c22
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.h2
-rw-r--r--src/ats/perf_ats_mlp.c1
-rw-r--r--src/ats/test_ats_mlp.c5
-rw-r--r--src/ats/test_ats_mlp_averaging.c5
5 files changed, 31 insertions, 4 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c
index 85113ea8e..512d5fb39 100644
--- a/src/ats/gnunet-service-ats_addresses_mlp.c
+++ b/src/ats/gnunet-service-ats_addresses_mlp.c
@@ -976,6 +976,7 @@ mlp_solve_mlp_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContex
976 976
977int GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx); 977int GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx);
978 978
979
979static void 980static void
980mlp_scheduler (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 981mlp_scheduler (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
981{ 982{
@@ -993,6 +994,7 @@ mlp_scheduler (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
993 GAS_mlp_solve_problem(mlp, &ctx); 994 GAS_mlp_solve_problem(mlp, &ctx);
994} 995}
995 996
997
996/** 998/**
997 * Solves the MLP problem 999 * Solves the MLP problem
998 * 1000 *
@@ -1003,6 +1005,19 @@ int
1003GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx) 1005GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx)
1004{ 1006{
1005 int res; 1007 int res;
1008 /* Check if solving is already running */
1009 if (GNUNET_YES == mlp->semaphore)
1010 {
1011 if (mlp->mlp_task != GNUNET_SCHEDULER_NO_TASK)
1012 {
1013 GNUNET_SCHEDULER_cancel(mlp->mlp_task);
1014 mlp->mlp_task = GNUNET_SCHEDULER_NO_TASK;
1015 }
1016 mlp->mlp_task = GNUNET_SCHEDULER_add_delayed (mlp->exec_interval, &mlp_scheduler, mlp);
1017 return GNUNET_SYSERR;
1018 }
1019 mlp->semaphore = GNUNET_YES;
1020
1006 mlp->last_execution = GNUNET_TIME_absolute_get (); 1021 mlp->last_execution = GNUNET_TIME_absolute_get ();
1007 1022
1008 ctx->lp_result = GNUNET_SYSERR; 1023 ctx->lp_result = GNUNET_SYSERR;
@@ -1025,6 +1040,7 @@ GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContex
1025 if (res != GNUNET_OK) 1040 if (res != GNUNET_OK)
1026 { 1041 {
1027 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "LP Problem solving failed\n"); 1042 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "LP Problem solving failed\n");
1043 mlp->semaphore = GNUNET_NO;
1028 return GNUNET_SYSERR; 1044 return GNUNET_SYSERR;
1029 } 1045 }
1030 1046
@@ -1041,6 +1057,7 @@ GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContex
1041 if (res != GNUNET_OK) 1057 if (res != GNUNET_OK)
1042 { 1058 {
1043 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP Problem solving failed\n"); 1059 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP Problem solving failed\n");
1060 mlp->semaphore = GNUNET_NO;
1044 return GNUNET_SYSERR; 1061 return GNUNET_SYSERR;
1045 } 1062 }
1046#if WRITE_MLP 1063#if WRITE_MLP
@@ -1085,7 +1102,8 @@ GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContex
1085 GNUNET_SCHEDULER_cancel(mlp->mlp_task); 1102 GNUNET_SCHEDULER_cancel(mlp->mlp_task);
1086 mlp->mlp_task = GNUNET_SCHEDULER_NO_TASK; 1103 mlp->mlp_task = GNUNET_SCHEDULER_NO_TASK;
1087 } 1104 }
1088 //mlp->mlp_task = GNUNET_SCHEDULER_add_delayed (mlp->exec_interval, &mlp_scheduler, mlp); 1105 mlp->mlp_task = GNUNET_SCHEDULER_add_delayed (mlp->exec_interval, &mlp_scheduler, mlp);
1106 mlp->semaphore = GNUNET_NO;
1089 return res; 1107 return res;
1090} 1108}
1091 1109
@@ -1360,7 +1378,7 @@ GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1360 mlp->b_min = b_min; 1378 mlp->b_min = b_min;
1361 mlp->n_min = n_min; 1379 mlp->n_min = n_min;
1362 mlp->m_q = GNUNET_ATS_QualityPropertiesCount; 1380 mlp->m_q = GNUNET_ATS_QualityPropertiesCount;
1363 1381 mlp->semaphore = GNUNET_NO;
1364 return mlp; 1382 return mlp;
1365} 1383}
1366 1384
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.h b/src/ats/gnunet-service-ats_addresses_mlp.h
index 14684d3ba..24be54e8f 100644
--- a/src/ats/gnunet-service-ats_addresses_mlp.h
+++ b/src/ats/gnunet-service-ats_addresses_mlp.h
@@ -139,6 +139,8 @@ struct GAS_MLP_Handle
139 */ 139 */
140 int auto_solve; 140 int auto_solve;
141 141
142 int semaphore;
143
142 /* state information */ 144 /* state information */
143 145
144 /** 146 /**
diff --git a/src/ats/perf_ats_mlp.c b/src/ats/perf_ats_mlp.c
index e25610c74..ec7234fcc 100644
--- a/src/ats/perf_ats_mlp.c
+++ b/src/ats/perf_ats_mlp.c
@@ -41,6 +41,7 @@
41static unsigned int peers; 41static unsigned int peers;
42static unsigned int addresses; 42static unsigned int addresses;
43static unsigned int numeric; 43static unsigned int numeric;
44static unsigned int updates;
44 45
45static int start; 46static int start;
46static int end; 47static int end;
diff --git a/src/ats/test_ats_mlp.c b/src/ats/test_ats_mlp.c
index 14df2d0df..4e8a68591 100644
--- a/src/ats/test_ats_mlp.c
+++ b/src/ats/test_ats_mlp.c
@@ -75,6 +75,7 @@ check (void *cls, char *const *args, const char *cfgfile,
75#endif 75#endif
76 struct ATS_Address addr[10]; 76 struct ATS_Address addr[10];
77 struct ATS_PreferedAddress *res[10]; 77 struct ATS_PreferedAddress *res[10];
78 struct GAS_MLP_SolutionContext ctx;
78 79
79 stats = GNUNET_STATISTICS_create("ats", cfg); 80 stats = GNUNET_STATISTICS_create("ats", cfg);
80 81
@@ -140,7 +141,9 @@ check (void *cls, char *const *args, const char *cfgfile,
140 GAS_mlp_address_update (mlp, addresses, &addr[2]); 141 GAS_mlp_address_update (mlp, addresses, &addr[2]);
141 GNUNET_assert (mlp->addr_in_problem == 3); 142 GNUNET_assert (mlp->addr_in_problem == 3);
142 143
143 GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp)); 144 GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp, &ctx));
145 GNUNET_assert (GNUNET_OK == ctx.lp_result);
146 GNUNET_assert (GNUNET_OK == ctx.mlp_result);
144 147
145 res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]); 148 res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]);
146 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out); 149 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out);
diff --git a/src/ats/test_ats_mlp_averaging.c b/src/ats/test_ats_mlp_averaging.c
index f7b7b1d8f..d9a46f68d 100644
--- a/src/ats/test_ats_mlp_averaging.c
+++ b/src/ats/test_ats_mlp_averaging.c
@@ -76,6 +76,7 @@ check (void *cls, char *const *args, const char *cfgfile,
76 struct ATS_Address addr[10]; 76 struct ATS_Address addr[10];
77 struct ATS_PreferedAddress *res[10]; 77 struct ATS_PreferedAddress *res[10];
78 struct MLP_information *mlpi; 78 struct MLP_information *mlpi;
79 struct GAS_MLP_SolutionContext ctx;
79 80
80 stats = GNUNET_STATISTICS_create("ats", cfg); 81 stats = GNUNET_STATISTICS_create("ats", cfg);
81 82
@@ -129,7 +130,9 @@ check (void *cls, char *const *args, const char *cfgfile,
129 GNUNET_assert (mlp->addr_in_problem == 1); 130 GNUNET_assert (mlp->addr_in_problem == 1);
130 131
131 132
132 GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp)); 133 GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp, &ctx));
134 GNUNET_assert (GNUNET_OK == ctx.lp_result);
135 GNUNET_assert (GNUNET_OK == ctx.mlp_result);
133 136
134 res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]); 137 res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]);
135 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out); 138 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out);