diff options
author | Fabian Oehlmann <oehlmann@in.tum.de> | 2013-09-25 11:51:20 +0000 |
---|---|---|
committer | Fabian Oehlmann <oehlmann@in.tum.de> | 2013-09-25 11:51:20 +0000 |
commit | 9b5a44b44ec66dc9cb00a1b053b4cb62fc1573d0 (patch) | |
tree | 721c8e826272a089ba2370f99cfa889f9da9b034 /src | |
parent | ade9098f026f851b7eea0b0d67c5a2e20c0c4501 (diff) | |
download | gnunet-9b5a44b44ec66dc9cb00a1b053b4cb62fc1573d0.tar.gz gnunet-9b5a44b44ec66dc9cb00a1b053b4cb62fc1573d0.zip |
ats_ril: debugged to run first tests
Diffstat (limited to 'src')
-rwxr-xr-x | src/ats/gnunet-service-ats-solver_ril.c | 184 |
1 files changed, 124 insertions, 60 deletions
diff --git a/src/ats/gnunet-service-ats-solver_ril.c b/src/ats/gnunet-service-ats-solver_ril.c index a47f1ff9a..3c7bc9be0 100755 --- a/src/ats/gnunet-service-ats-solver_ril.c +++ b/src/ats/gnunet-service-ats-solver_ril.c | |||
@@ -55,7 +55,8 @@ enum RIL_Action_Type | |||
55 | 55 | ||
56 | enum RIL_Algorithm | 56 | enum RIL_Algorithm |
57 | { | 57 | { |
58 | RIL_ALGO_SARSA, RIL_ALGO_Q | 58 | RIL_ALGO_SARSA = 0, |
59 | RIL_ALGO_Q = 1 | ||
59 | }; | 60 | }; |
60 | 61 | ||
61 | enum RIL_E_Modification | 62 | enum RIL_E_Modification |
@@ -315,7 +316,7 @@ agent_estimate_q (struct RIL_Peer_Agent *agent, double *state, int action) | |||
315 | 316 | ||
316 | for (i = 0; i < agent->m; i++) | 317 | for (i = 0; i < agent->m; i++) |
317 | { | 318 | { |
318 | result += state[i] * (agent->W)[agent->m][action]; | 319 | result += state[i] * agent->W[action][i]; |
319 | } | 320 | } |
320 | 321 | ||
321 | return result; | 322 | return result; |
@@ -353,7 +354,7 @@ agent_get_action_best (struct RIL_Peer_Agent *agent, double *state) | |||
353 | int i; | 354 | int i; |
354 | int max_i = -1; | 355 | int max_i = -1; |
355 | double cur_q; | 356 | double cur_q; |
356 | double max_q = DBL_MIN; | 357 | double max_q = -DBL_MAX; |
357 | 358 | ||
358 | for (i = 0; i < agent->n; i++) | 359 | for (i = 0; i < agent->n; i++) |
359 | { | 360 | { |
@@ -397,8 +398,9 @@ agent_update_weights (struct RIL_Peer_Agent *agent, | |||
397 | { | 398 | { |
398 | int i; | 399 | int i; |
399 | double delta; | 400 | double delta; |
400 | double *theta = (agent->W)[agent->a_old]; | 401 | double *theta = agent->W[agent->a_old]; |
401 | 402 | ||
403 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "agent_update_weights() MUH a_old = %d\n", agent->a_old); | ||
402 | delta = reward + agent_estimate_q (agent, s_next, a_prime) | 404 | delta = reward + agent_estimate_q (agent, s_next, a_prime) |
403 | - agent_estimate_q (agent, agent->s_old, agent->a_old); | 405 | - agent_estimate_q (agent, agent->s_old, agent->a_old); |
404 | for (i = 0; i < agent->m; i++) | 406 | for (i = 0; i < agent->m; i++) |
@@ -457,13 +459,13 @@ envi_get_state (struct GAS_RIL_Handle *solver) | |||
457 | struct RIL_Network *net; | 459 | struct RIL_Network *net; |
458 | double *state = GNUNET_malloc (sizeof (double) * solver->networks_count * 4); | 460 | double *state = GNUNET_malloc (sizeof (double) * solver->networks_count * 4); |
459 | 461 | ||
460 | for (i = 0; i < solver->networks_count; i += 4) | 462 | for (i = 0; i < solver->networks_count; i++) |
461 | { | 463 | { |
462 | net = (&solver->network_entries)[i]; | 464 | net = &solver->network_entries[i]; |
463 | state[i] = (double) net->bw_in_assigned; | 465 | state[i*4 + 0] = (double) net->bw_in_assigned; |
464 | state[i + 1] = (double) net->bw_in_available; | 466 | state[i*4 + 1] = (double) net->bw_in_available; |
465 | state[i + 2] = (double) net->bw_out_assigned; | 467 | state[i*4 + 2] = (double) net->bw_out_assigned; |
466 | state[i + 3] = (double) net->bw_out_available; | 468 | state[i*4 + 3] = (double) net->bw_out_available; |
467 | } | 469 | } |
468 | 470 | ||
469 | return state; | 471 | return state; |
@@ -574,6 +576,9 @@ agent_step (struct RIL_Peer_Agent *agent) | |||
574 | s_next = envi_get_state (agent->envi); | 576 | s_next = envi_get_state (agent->envi); |
575 | reward = envi_get_reward (agent->envi, agent); | 577 | reward = envi_get_reward (agent->envi, agent); |
576 | 578 | ||
579 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "agent_step() with algorithm %s\n", | ||
580 | agent->envi->parameters.algorithm ? "Q" : "SARSA"); | ||
581 | |||
577 | switch (agent->envi->parameters.algorithm) | 582 | switch (agent->envi->parameters.algorithm) |
578 | { | 583 | { |
579 | case RIL_ALGO_SARSA: | 584 | case RIL_ALGO_SARSA: |
@@ -586,14 +591,16 @@ agent_step (struct RIL_Peer_Agent *agent) | |||
586 | { | 591 | { |
587 | a_next = agent_get_action_best (agent, s_next); | 592 | a_next = agent_get_action_best (agent, s_next); |
588 | } | 593 | } |
589 | //updates weights with selected action (on-policy) | 594 | //updates weights with selected action (on-policy), if not first step |
590 | agent_update_weights (agent, reward, s_next, a_next); | 595 | if (-1 != agent->a_old) |
596 | agent_update_weights (agent, reward, s_next, a_next); | ||
591 | break; | 597 | break; |
592 | 598 | ||
593 | case RIL_ALGO_Q: | 599 | case RIL_ALGO_Q: |
594 | //updates weights with best action, disregarding actually selected action (off-policy) | 600 | //updates weights with best action, disregarding actually selected action (off-policy), if not first step |
595 | a_next = agent_get_action_best (agent, s_next); | 601 | a_next = agent_get_action_best (agent, s_next); |
596 | agent_update_weights (agent, reward, s_next, a_next); | 602 | if (-1 != agent->a_old) |
603 | agent_update_weights (agent, reward, s_next, a_next); | ||
597 | if (agent_decide_exploration (agent)) | 604 | if (agent_decide_exploration (agent)) |
598 | { | 605 | { |
599 | a_next = agent_get_action_explore (agent, s_next); | 606 | a_next = agent_get_action_explore (agent, s_next); |
@@ -670,7 +677,7 @@ agent_init (void *s, const struct GNUNET_PeerIdentity *peer) | |||
670 | agent->W = (double **) GNUNET_malloc (sizeof (double) * agent->n); | 677 | agent->W = (double **) GNUNET_malloc (sizeof (double) * agent->n); |
671 | for (i = 0; i < agent->n; i++) | 678 | for (i = 0; i < agent->n; i++) |
672 | { | 679 | { |
673 | (agent->W)[i] = (double *) GNUNET_malloc (sizeof (double) * agent->m); | 680 | agent->W[i] = (double *) GNUNET_malloc (sizeof (double) * agent->m); |
674 | } | 681 | } |
675 | agent->a_old = -1; | 682 | agent->a_old = -1; |
676 | agent->e = (double *) GNUNET_malloc (sizeof (double) * agent->m); | 683 | agent->e = (double *) GNUNET_malloc (sizeof (double) * agent->m); |
@@ -694,13 +701,32 @@ agent_die (struct GAS_RIL_Handle *solver, struct RIL_Peer_Agent *agent) | |||
694 | 701 | ||
695 | for (i = 0; i < agent->n; i++) | 702 | for (i = 0; i < agent->n; i++) |
696 | { | 703 | { |
697 | GNUNET_free((agent->W)[i]); | 704 | GNUNET_free(agent->W[i]); |
698 | } | 705 | } |
699 | GNUNET_free(agent->W); | 706 | GNUNET_free(agent->W); |
700 | GNUNET_free(agent->e); | 707 | GNUNET_free(agent->e); |
701 | GNUNET_free(agent->s_old); | 708 | GNUNET_free(agent->s_old); |
702 | } | 709 | } |
703 | 710 | ||
711 | static void | ||
712 | ril_remove_agent (struct GAS_RIL_Handle *s, struct RIL_Peer_Agent *agent) | ||
713 | { | ||
714 | struct RIL_Peer_Agent *cur_agent; | ||
715 | struct RIL_Peer_Agent *next_agent; | ||
716 | |||
717 | cur_agent = s->agents_head; | ||
718 | while (NULL != cur_agent) | ||
719 | { | ||
720 | next_agent = cur_agent->next; | ||
721 | |||
722 | if (agent == cur_agent) | ||
723 | GNUNET_CONTAINER_DLL_remove(s->agents_head, s->agents_tail, cur_agent); | ||
724 | agent_die (s, cur_agent); | ||
725 | |||
726 | cur_agent = next_agent; | ||
727 | } | ||
728 | } | ||
729 | |||
704 | /** | 730 | /** |
705 | * Counts the (active) agents | 731 | * Counts the (active) agents |
706 | * @param solver solver handle | 732 | * @param solver solver handle |
@@ -728,11 +754,13 @@ ril_count_agents (struct GAS_RIL_Handle *solver, int active_only) | |||
728 | * Returns the agent for a peer | 754 | * Returns the agent for a peer |
729 | * @param s solver handle | 755 | * @param s solver handle |
730 | * @param peer identity of the peer | 756 | * @param peer identity of the peer |
757 | * @param create whether to create an agent if none is allocated yet | ||
731 | * @return agent | 758 | * @return agent |
732 | */ | 759 | */ |
733 | static struct RIL_Peer_Agent * | 760 | static struct RIL_Peer_Agent * |
734 | ril_get_agent (struct GAS_RIL_Handle *solver, | 761 | ril_get_agent (struct GAS_RIL_Handle *solver, |
735 | const struct GNUNET_PeerIdentity *peer) | 762 | const struct GNUNET_PeerIdentity *peer, |
763 | int create) | ||
736 | { | 764 | { |
737 | struct RIL_Peer_Agent *cur; | 765 | struct RIL_Peer_Agent *cur; |
738 | 766 | ||
@@ -744,7 +772,19 @@ ril_get_agent (struct GAS_RIL_Handle *solver, | |||
744 | } | 772 | } |
745 | } | 773 | } |
746 | 774 | ||
747 | return agent_init (solver, peer); | 775 | if (create) |
776 | return agent_init (solver, peer); | ||
777 | return NULL; | ||
778 | } | ||
779 | |||
780 | static int | ||
781 | ril_network_is_active (struct RIL_Network *network) | ||
782 | { | ||
783 | uint32_t min_bw = ntohl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__); | ||
784 | |||
785 | if (network->bw_out_available < min_bw) | ||
786 | return GNUNET_NO; | ||
787 | return GNUNET_YES; | ||
748 | } | 788 | } |
749 | 789 | ||
750 | /** | 790 | /** |
@@ -760,23 +800,25 @@ ril_init_agents_it (void *cls, const struct GNUNET_HashCode *key, void *value) | |||
760 | { | 800 | { |
761 | struct GAS_RIL_Handle *solver = cls; | 801 | struct GAS_RIL_Handle *solver = cls; |
762 | struct ATS_Address *address = value; | 802 | struct ATS_Address *address = value; |
763 | struct RIL_Peer_Agent *agent; | 803 | struct RIL_Peer_Agent *agent = NULL; |
764 | uint32_t min_bw = ntohl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__); | 804 | uint32_t min_bw = ntohl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__); |
765 | 805 | ||
766 | agent = ril_get_agent (solver, &address->peer); | 806 | if (ril_network_is_active(address->solver_information)) |
807 | { | ||
808 | agent = ril_get_agent (solver, &address->peer, GNUNET_YES); | ||
767 | 809 | ||
768 | GNUNET_assert(NULL != agent); | 810 | GNUNET_assert(NULL != agent); |
769 | 811 | ||
770 | if (NULL == agent->address) | 812 | if (NULL == agent->address) |
771 | { | 813 | { |
772 | agent->address = address; | 814 | agent->address = address; |
773 | agent->address->active = GNUNET_YES; | 815 | agent->address->active = GNUNET_YES; |
774 | agent->bw_in = min_bw; | 816 | agent->bw_in = min_bw; |
775 | agent->address->assigned_bw_in.value__ = htonl (min_bw); | 817 | agent->address->assigned_bw_in.value__ = htonl (min_bw); |
776 | agent->bw_out = min_bw; | 818 | agent->bw_out = min_bw; |
777 | agent->address->assigned_bw_out.value__ = htonl (min_bw); | 819 | agent->address->assigned_bw_out.value__ = htonl (min_bw); |
820 | } | ||
778 | } | 821 | } |
779 | |||
780 | return GNUNET_YES; | 822 | return GNUNET_YES; |
781 | } | 823 | } |
782 | 824 | ||
@@ -791,6 +833,7 @@ static struct RIL_Network * | |||
791 | ril_get_network (struct GAS_RIL_Handle *s, uint32_t type) | 833 | ril_get_network (struct GAS_RIL_Handle *s, uint32_t type) |
792 | { | 834 | { |
793 | int i; | 835 | int i; |
836 | |||
794 | for (i = 0; i < s->networks_count; i++) | 837 | for (i = 0; i < s->networks_count; i++) |
795 | { | 838 | { |
796 | if (s->network_entries[i].type == type) { | 839 | if (s->network_entries[i].type == type) { |
@@ -893,13 +936,10 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
893 | solver->step_time = RIL_DEFAULT_STEP_TIME; | 936 | solver->step_time = RIL_DEFAULT_STEP_TIME; |
894 | } | 937 | } |
895 | if (GNUNET_OK | 938 | if (GNUNET_OK |
896 | != GNUNET_CONFIGURATION_get_value_string (cfg, "ats", "RIL_ALGORITHM", | 939 | == GNUNET_CONFIGURATION_get_value_string (cfg, "ats", "RIL_ALGORITHM", |
897 | &string)) | 940 | &string) && NULL != string && 0 == strcmp (string, "SARSA")) |
898 | { | 941 | { |
899 | if (0 == strcmp (string, "SARSA")) | 942 | solver->parameters.algorithm = RIL_ALGO_SARSA; |
900 | { | ||
901 | solver->parameters.algorithm = RIL_ALGO_SARSA; | ||
902 | } | ||
903 | } | 943 | } |
904 | else | 944 | else |
905 | { | 945 | { |
@@ -910,7 +950,6 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
910 | &tmp)) | 950 | &tmp)) |
911 | { | 951 | { |
912 | solver->parameters.gamma = (double) tmp / 100; | 952 | solver->parameters.gamma = (double) tmp / 100; |
913 | ; | ||
914 | } | 953 | } |
915 | else | 954 | else |
916 | { | 955 | { |
@@ -921,7 +960,6 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
921 | "RIL_GRADIENT_STEP_SIZE", &tmp)) | 960 | "RIL_GRADIENT_STEP_SIZE", &tmp)) |
922 | { | 961 | { |
923 | solver->parameters.alpha = (double) tmp / 100; | 962 | solver->parameters.alpha = (double) tmp / 100; |
924 | ; | ||
925 | } | 963 | } |
926 | else | 964 | else |
927 | { | 965 | { |
@@ -932,7 +970,6 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
932 | &tmp)) | 970 | &tmp)) |
933 | { | 971 | { |
934 | solver->parameters.lambda = (double) tmp / 100; | 972 | solver->parameters.lambda = (double) tmp / 100; |
935 | ; | ||
936 | } | 973 | } |
937 | else | 974 | else |
938 | { | 975 | { |
@@ -964,13 +1001,6 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
964 | cur->bw_out_assigned = 0; | 1001 | cur->bw_out_assigned = 0; |
965 | } | 1002 | } |
966 | 1003 | ||
967 | c = GNUNET_CONTAINER_multihashmap_iterate (addresses, &ril_init_agents_it, | ||
968 | solver); | ||
969 | |||
970 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
971 | "API_init() Solving ATS for %d addresses and %d peers\n", c, | ||
972 | ril_count_agents(solver, GNUNET_NO)); | ||
973 | |||
974 | solver->next_step = GNUNET_SCHEDULER_add_delayed ( | 1004 | solver->next_step = GNUNET_SCHEDULER_add_delayed ( |
975 | GNUNET_TIME_relative_multiply (GNUNET_TIME_relative_get_millisecond_ (), | 1005 | GNUNET_TIME_relative_multiply (GNUNET_TIME_relative_get_millisecond_ (), |
976 | 1000), &ril_periodic_step, solver); | 1006 | 1000), &ril_periodic_step, solver); |
@@ -1030,6 +1060,8 @@ GAS_ril_address_add (void *solver, | |||
1030 | * and action vector | 1060 | * and action vector |
1031 | */ | 1061 | */ |
1032 | 1062 | ||
1063 | address->solver_information = ril_get_network(s, network); | ||
1064 | |||
1033 | /* | 1065 | /* |
1034 | * reiterate all addresses, create new agent if necessary and give the agent the address | 1066 | * reiterate all addresses, create new agent if necessary and give the agent the address |
1035 | */ | 1067 | */ |
@@ -1067,7 +1099,13 @@ GAS_ril_address_delete (void *solver, | |||
1067 | struct GAS_RIL_Handle *s = solver; | 1099 | struct GAS_RIL_Handle *s = solver; |
1068 | struct RIL_Peer_Agent *agent; | 1100 | struct RIL_Peer_Agent *agent; |
1069 | 1101 | ||
1070 | agent = ril_get_agent (s, &address->peer); | 1102 | agent = ril_get_agent (s, &address->peer, GNUNET_NO); |
1103 | |||
1104 | if (NULL == agent) | ||
1105 | { | ||
1106 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "API_address_delete() deleting address for unallocated agent"); | ||
1107 | return; | ||
1108 | } | ||
1071 | 1109 | ||
1072 | if (0 == memcmp (agent->address->addr, address->addr, address->addr_len)) //if used address deleted | 1110 | if (0 == memcmp (agent->address->addr, address->addr, address->addr_len)) //if used address deleted |
1073 | { | 1111 | { |
@@ -1077,6 +1115,7 @@ GAS_ril_address_delete (void *solver, | |||
1077 | if (NULL == agent->address) //no other address available | 1115 | if (NULL == agent->address) //no other address available |
1078 | { | 1116 | { |
1079 | agent->active = GNUNET_NO; | 1117 | agent->active = GNUNET_NO; |
1118 | ril_remove_agent (solver, agent); | ||
1080 | } | 1119 | } |
1081 | } | 1120 | } |
1082 | 1121 | ||
@@ -1186,23 +1225,40 @@ GAS_ril_address_change_network (void *solver, | |||
1186 | GNUNET_ATS_print_network_type (current_network), | 1225 | GNUNET_ATS_print_network_type (current_network), |
1187 | GNUNET_ATS_print_network_type (new_network)); | 1226 | GNUNET_ATS_print_network_type (new_network)); |
1188 | 1227 | ||
1189 | agent = ril_get_agent (s, &address->peer); | 1228 | address->solver_information = ril_get_network(solver, new_network); |
1190 | 1229 | ||
1191 | if (address->active) | 1230 | if (address->active) |
1192 | { | 1231 | { |
1232 | agent = ril_get_agent(solver, &address->peer, GNUNET_NO); | ||
1233 | |||
1193 | //remove from old network | 1234 | //remove from old network |
1194 | net = ril_get_network (s, current_network); | 1235 | net = ril_get_network (s, current_network); |
1195 | net->bw_in_assigned -= agent->bw_in; | 1236 | net->bw_in_assigned -= agent->bw_in; |
1196 | net->bw_out_assigned -= agent->bw_out; | 1237 | net->bw_out_assigned -= agent->bw_out; |
1197 | 1238 | ||
1198 | //add to new network | 1239 | if (ril_network_is_active(ril_get_network(s, new_network))) |
1199 | net = ril_get_network (s, new_network); | 1240 | { |
1200 | net->bw_in_assigned += agent->bw_in; | 1241 | //add to new network |
1201 | net->bw_out_assigned += agent->bw_out; | 1242 | net = ril_get_network (s, new_network); |
1202 | 1243 | net->bw_in_assigned += agent->bw_in; | |
1203 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1244 | net->bw_out_assigned += agent->bw_out; |
1204 | "API_address_change_network() Moved %d inbound and %d " | 1245 | |
1205 | "outbound\n", agent->bw_in, agent->bw_out); | 1246 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1247 | "API_address_change_network() Moved %d inbound and %d " | ||
1248 | "outbound\n", agent->bw_in, agent->bw_out); | ||
1249 | } | ||
1250 | else //new network for this address is not active => address must not be considered | ||
1251 | { | ||
1252 | address->active = GNUNET_NO; | ||
1253 | agent->address = NULL; //delete address | ||
1254 | GNUNET_CONTAINER_multihashmap_iterate (s->addresses, &ril_init_agents_it, | ||
1255 | solver); //put another address | ||
1256 | if (NULL == agent->address) //no other address available | ||
1257 | { | ||
1258 | agent->active = GNUNET_NO; | ||
1259 | ril_remove_agent(s, agent); | ||
1260 | } | ||
1261 | } | ||
1206 | } | 1262 | } |
1207 | } | 1263 | } |
1208 | 1264 | ||
@@ -1246,7 +1302,8 @@ GAS_ril_bulk_start (void *solver) | |||
1246 | * bandwidth assignment triggered anyway. Therefore, changes to addresses can come and go as | 1302 | * bandwidth assignment triggered anyway. Therefore, changes to addresses can come and go as |
1247 | * they want. Consideration: Step-pause during bulk-start-stop period... | 1303 | * they want. Consideration: Step-pause during bulk-start-stop period... |
1248 | */ | 1304 | */ |
1249 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "API_bulk_start()\n"); | 1305 | |
1306 | //GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "API_bulk_start()\n"); | ||
1250 | } | 1307 | } |
1251 | 1308 | ||
1252 | /** | 1309 | /** |
@@ -1259,7 +1316,8 @@ GAS_ril_bulk_stop (void *solver) | |||
1259 | /* | 1316 | /* |
1260 | * bulk counter down, see bulk_start() | 1317 | * bulk counter down, see bulk_start() |
1261 | */ | 1318 | */ |
1262 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "API_bulk_stop()\n"); | 1319 | |
1320 | //GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "API_bulk_stop()\n"); | ||
1263 | } | 1321 | } |
1264 | 1322 | ||
1265 | /** | 1323 | /** |
@@ -1278,7 +1336,13 @@ GAS_ril_get_preferred_address (void *solver, | |||
1278 | struct GAS_RIL_Handle *s = solver; | 1336 | struct GAS_RIL_Handle *s = solver; |
1279 | struct RIL_Peer_Agent *agent; | 1337 | struct RIL_Peer_Agent *agent; |
1280 | 1338 | ||
1281 | agent = ril_get_agent (s, peer); | 1339 | agent = ril_get_agent (s, peer, GNUNET_NO); |
1340 | |||
1341 | if (NULL == agent) | ||
1342 | { | ||
1343 | return NULL; | ||
1344 | } | ||
1345 | |||
1282 | agent->active = GNUNET_YES; | 1346 | agent->active = GNUNET_YES; |
1283 | 1347 | ||
1284 | GNUNET_assert(NULL != agent->address); | 1348 | GNUNET_assert(NULL != agent->address); |
@@ -1303,7 +1367,7 @@ GAS_ril_stop_get_preferred_address (void *solver, | |||
1303 | struct GAS_RIL_Handle *s = solver; | 1367 | struct GAS_RIL_Handle *s = solver; |
1304 | struct RIL_Peer_Agent *agent; | 1368 | struct RIL_Peer_Agent *agent; |
1305 | 1369 | ||
1306 | agent = ril_get_agent (s, peer); | 1370 | agent = ril_get_agent (s, peer, GNUNET_NO); |
1307 | agent->active = GNUNET_NO; | 1371 | agent->active = GNUNET_NO; |
1308 | 1372 | ||
1309 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1373 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |