diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-04-19 15:11:54 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-04-19 15:11:54 +0000 |
commit | 20f538f06d2852ddaad7f6f631eede8c39234da4 (patch) | |
tree | 0a0d743950b130d972f4f734d80f5307198e5547 /src/ats | |
parent | 9dfda11d4fba38cbf2cf23c9acdf2c31eebbc72e (diff) | |
download | gnunet-20f538f06d2852ddaad7f6f631eede8c39234da4.tar.gz gnunet-20f538f06d2852ddaad7f6f631eede8c39234da4.zip |
- fixes
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 22 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.h | 2 | ||||
-rw-r--r-- | src/ats/perf_ats_mlp.c | 1 | ||||
-rw-r--r-- | src/ats/test_ats_mlp.c | 5 | ||||
-rw-r--r-- | src/ats/test_ats_mlp_averaging.c | 5 |
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 | ||
977 | int GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx); | 977 | int GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx); |
978 | 978 | ||
979 | |||
979 | static void | 980 | static void |
980 | mlp_scheduler (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 981 | mlp_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 | |||
1003 | GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp, struct GAS_MLP_SolutionContext *ctx) | 1005 | GAS_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 @@ | |||
41 | static unsigned int peers; | 41 | static unsigned int peers; |
42 | static unsigned int addresses; | 42 | static unsigned int addresses; |
43 | static unsigned int numeric; | 43 | static unsigned int numeric; |
44 | static unsigned int updates; | ||
44 | 45 | ||
45 | static int start; | 46 | static int start; |
46 | static int end; | 47 | static 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); |