diff options
author | Christian Fuchs <christian.fuchs@cfuchs.net> | 2013-10-09 14:08:13 +0000 |
---|---|---|
committer | Christian Fuchs <christian.fuchs@cfuchs.net> | 2013-10-09 14:08:13 +0000 |
commit | b3f4f964227220a10639f4484b86f396ca2dceed (patch) | |
tree | 7f4c25d185ade91b9f0b2041732dd187779aee7e /src/scalarproduct | |
parent | addab14231d4babb8e9eabb5ca43328625b2b87b (diff) | |
download | gnunet-b3f4f964227220a10639f4484b86f396ca2dceed.tar.gz gnunet-b3f4f964227220a10639f4484b86f396ca2dceed.zip |
extended cleanup function to take care of new variables in session structure
better cleanup for multipart handling
Diffstat (limited to 'src/scalarproduct')
-rw-r--r-- | src/scalarproduct/gnunet-service-scalarproduct.c | 87 |
1 files changed, 52 insertions, 35 deletions
diff --git a/src/scalarproduct/gnunet-service-scalarproduct.c b/src/scalarproduct/gnunet-service-scalarproduct.c index fbdb58a23..5bf5f1a2b 100644 --- a/src/scalarproduct/gnunet-service-scalarproduct.c +++ b/src/scalarproduct/gnunet-service-scalarproduct.c | |||
@@ -697,12 +697,26 @@ free_session (struct ServiceSession * session) | |||
697 | { | 697 | { |
698 | unsigned int i; | 698 | unsigned int i; |
699 | 699 | ||
700 | if (session->a) { | 700 | if (session->a){ |
701 | for (i = 0; i < session->used; i++) | 701 | for (i = 0; i < session->used; i++) |
702 | gcry_mpi_release (session->a[i]); | 702 | if (session->a[i]) gcry_mpi_release (session->a[i]); |
703 | 703 | GNUNET_free_non_null (session->a); | |
704 | GNUNET_free (session->a); | 704 | } |
705 | GNUNET_free_non_null (session->mask); | ||
706 | if (session->r){ | ||
707 | for (i = 0; i < session->used; i++) | ||
708 | if (session->r[i]) gcry_mpi_release (session->r[i]); | ||
709 | GNUNET_free_non_null(session->r); | ||
710 | } | ||
711 | if (session->r_prime){ | ||
712 | for (i = 0; i < session->used; i++) | ||
713 | if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); | ||
714 | GNUNET_free_non_null(session->r_prime); | ||
705 | } | 715 | } |
716 | if (session->s) | ||
717 | gcry_mpi_release (session->s); | ||
718 | if (session->s_prime) | ||
719 | gcry_mpi_release (session->s_prime); | ||
706 | if (session->product) | 720 | if (session->product) |
707 | gcry_mpi_release (session->product); | 721 | gcry_mpi_release (session->product); |
708 | 722 | ||
@@ -1978,20 +1992,14 @@ handle_service_request_multipart (void *cls, | |||
1978 | 1992 | ||
1979 | return GNUNET_OK; | 1993 | return GNUNET_OK; |
1980 | except: | 1994 | except: |
1981 | for (i = 0; i < session->used; i++) | ||
1982 | if (session->a[i]) | ||
1983 | gcry_mpi_release (session->a[i]); | ||
1984 | gcry_sexp_release (session->remote_pubkey); | ||
1985 | session->remote_pubkey = NULL; | ||
1986 | GNUNET_free (session->a); | ||
1987 | session->a = NULL; | ||
1988 | free_session (session); | ||
1989 | // and notify our client-session that we could not complete the session | 1995 | // and notify our client-session that we could not complete the session |
1996 | GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session); | ||
1990 | if (session->response) | 1997 | if (session->response) |
1991 | // we just found the responder session in this queue | 1998 | // we just found the responder session in this queue |
1992 | session->response->client_notification_task = | 1999 | session->response->client_notification_task = |
1993 | GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, | 2000 | GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, |
1994 | session->response); | 2001 | session->response); |
2002 | free_session (session); | ||
1995 | return GNUNET_SYSERR; | 2003 | return GNUNET_SYSERR; |
1996 | } | 2004 | } |
1997 | 2005 | ||
@@ -2027,8 +2035,7 @@ handle_service_request (void *cls, | |||
2027 | 2035 | ||
2028 | session = (struct ServiceSession *) * tunnel_ctx; | 2036 | session = (struct ServiceSession *) * tunnel_ctx; |
2029 | if (WAITING_FOR_SERVICE_REQUEST != session->state) { | 2037 | if (WAITING_FOR_SERVICE_REQUEST != session->state) { |
2030 | GNUNET_break_op (0); | 2038 | goto invalid_msg; |
2031 | goto except; | ||
2032 | } | 2039 | } |
2033 | // Check if message was sent by me, which would be bad! | 2040 | // Check if message was sent by me, which would be bad! |
2034 | if (!memcmp (&session->peer, &me, sizeof (struct GNUNET_PeerIdentity))) { | 2041 | if (!memcmp (&session->peer, &me, sizeof (struct GNUNET_PeerIdentity))) { |
@@ -2116,7 +2123,7 @@ handle_service_request (void *cls, | |||
2116 | if (ret) { | 2123 | if (ret) { |
2117 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] to MPI!\n%s/%s\n"), | 2124 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ ("Could not translate E[a%d] to MPI!\n%s/%s\n"), |
2118 | i, gcry_strsource (ret), gcry_strerror (ret)); | 2125 | i, gcry_strsource (ret), gcry_strerror (ret)); |
2119 | goto except; | 2126 | goto invalid_msg; |
2120 | } | 2127 | } |
2121 | } | 2128 | } |
2122 | GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, session); | 2129 | GNUNET_CONTAINER_DLL_insert (from_service_head, from_service_tail, session); |
@@ -2129,7 +2136,7 @@ handle_service_request (void *cls, | |||
2129 | if (GNUNET_OK != compute_service_response (session, session->response)) { | 2136 | if (GNUNET_OK != compute_service_response (session, session->response)) { |
2130 | //something went wrong, remove it again... | 2137 | //something went wrong, remove it again... |
2131 | GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session); | 2138 | GNUNET_CONTAINER_DLL_remove (from_service_head, from_service_tail, session); |
2132 | goto except; | 2139 | goto invalid_msg; |
2133 | } | 2140 | } |
2134 | } | 2141 | } |
2135 | else | 2142 | else |
@@ -2140,21 +2147,15 @@ handle_service_request (void *cls, | |||
2140 | } | 2147 | } |
2141 | } | 2148 | } |
2142 | return GNUNET_OK; | 2149 | return GNUNET_OK; |
2143 | except: | 2150 | invalid_msg: |
2144 | for (i = 0; i < session->used; i++) | 2151 | GNUNET_break_op (0); |
2145 | if (session->a[i]) | ||
2146 | gcry_mpi_release (session->a[i]); | ||
2147 | gcry_sexp_release (session->remote_pubkey); | ||
2148 | session->remote_pubkey = NULL; | ||
2149 | GNUNET_free (session->a); | ||
2150 | session->a = NULL; | ||
2151 | free_session (session); | ||
2152 | // and notify our client-session that we could not complete the session | 2152 | // and notify our client-session that we could not complete the session |
2153 | if (session->response) | 2153 | if (session->response) |
2154 | // we just found the responder session in this queue | 2154 | // we just found the responder session in this queue |
2155 | session->response->client_notification_task = | 2155 | session->response->client_notification_task = |
2156 | GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, | 2156 | GNUNET_SCHEDULER_add_now (&prepare_client_end_notification, |
2157 | session->response); | 2157 | session->response); |
2158 | free_session (session); | ||
2158 | return GNUNET_SYSERR; | 2159 | return GNUNET_SYSERR; |
2159 | } | 2160 | } |
2160 | 2161 | ||
@@ -2230,14 +2231,23 @@ handle_service_response_multipart (void *cls, | |||
2230 | 2231 | ||
2231 | invalid_msg: | 2232 | invalid_msg: |
2232 | GNUNET_break_op (0); | 2233 | GNUNET_break_op (0); |
2233 | gcry_mpi_release (session->s); | 2234 | if (session->s) |
2234 | gcry_mpi_release (session->s_prime); | 2235 | gcry_mpi_release (session->s); |
2235 | for (i = 0; session->r && i < session->used; i++){ | 2236 | if (session->s_prime) |
2236 | if (session->r[i]) gcry_mpi_release (session->r[i]); | 2237 | gcry_mpi_release (session->s_prime); |
2237 | if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); | 2238 | if (session->r) |
2238 | } | 2239 | for (i = 0; session->r && i < session->used; i++) |
2240 | if (session->r[i]) gcry_mpi_release (session->r[i]); | ||
2241 | if (session->r_prime) | ||
2242 | for (i = 0; session->r_prime && i < session->used; i++) | ||
2243 | if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); | ||
2244 | if (session->a) | ||
2245 | for (i = 0; session->a && i < session->used; i++) | ||
2246 | if (session->a[i]) gcry_mpi_release (session->a[i]); | ||
2239 | GNUNET_free_non_null (session->r); | 2247 | GNUNET_free_non_null (session->r); |
2240 | GNUNET_free_non_null (session->r_prime); | 2248 | GNUNET_free_non_null (session->r_prime); |
2249 | GNUNET_free_non_null (session->a); | ||
2250 | session->a = NULL; | ||
2241 | session->s = NULL; | 2251 | session->s = NULL; |
2242 | session->s_prime = NULL; | 2252 | session->s_prime = NULL; |
2243 | session->r = NULL; | 2253 | session->r = NULL; |
@@ -2345,12 +2355,19 @@ invalid_msg: | |||
2345 | gcry_mpi_release (session->s); | 2355 | gcry_mpi_release (session->s); |
2346 | if (session->s_prime) | 2356 | if (session->s_prime) |
2347 | gcry_mpi_release (session->s_prime); | 2357 | gcry_mpi_release (session->s_prime); |
2348 | for (i = 0; session->r && i < session->used; i++){ | 2358 | if (session->r) |
2349 | if (session->r[i]) gcry_mpi_release (session->r[i]); | 2359 | for (i = 0; session->r && i < session->used; i++) |
2350 | if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); | 2360 | if (session->r[i]) gcry_mpi_release (session->r[i]); |
2351 | } | 2361 | if (session->r_prime) |
2362 | for (i = 0; session->r_prime && i < session->used; i++) | ||
2363 | if (session->r_prime[i]) gcry_mpi_release (session->r_prime[i]); | ||
2364 | if (session->a) | ||
2365 | for (i = 0; session->a && i < session->used; i++) | ||
2366 | if (session->a[i]) gcry_mpi_release (session->a[i]); | ||
2352 | GNUNET_free_non_null (session->r); | 2367 | GNUNET_free_non_null (session->r); |
2353 | GNUNET_free_non_null (session->r_prime); | 2368 | GNUNET_free_non_null (session->r_prime); |
2369 | GNUNET_free_non_null (session->a); | ||
2370 | session->a = NULL; | ||
2354 | session->s = NULL; | 2371 | session->s = NULL; |
2355 | session->s_prime = NULL; | 2372 | session->s_prime = NULL; |
2356 | session->r = NULL; | 2373 | session->r = NULL; |