diff options
author | Bart Polot <bart@net.in.tum.de> | 2013-11-15 15:11:37 +0000 |
---|---|---|
committer | Bart Polot <bart@net.in.tum.de> | 2013-11-15 15:11:37 +0000 |
commit | e9cb00442dfc2a6dd7910e4c361a37cf3f523128 (patch) | |
tree | a1aae52c23108699512f0a4fb2d47ddfad70da9c /src/mesh | |
parent | ebfc819af3fe71c4f567afedc38baa803a00118e (diff) | |
download | gnunet-e9cb00442dfc2a6dd7910e4c361a37cf3f523128.tar.gz gnunet-e9cb00442dfc2a6dd7910e4c361a37cf3f523128.zip |
- dont use a cancel handle if cont is NULL, fix potential memleak
Diffstat (limited to 'src/mesh')
-rw-r--r-- | src/mesh/gnunet-service-mesh_connection.c | 21 | ||||
-rw-r--r-- | src/mesh/gnunet-service-mesh_connection.h | 3 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/mesh/gnunet-service-mesh_connection.c b/src/mesh/gnunet-service-mesh_connection.c index e76839596..499c75525 100644 --- a/src/mesh/gnunet-service-mesh_connection.c +++ b/src/mesh/gnunet-service-mesh_connection.c | |||
@@ -216,8 +216,19 @@ struct MeshConnection | |||
216 | */ | 216 | */ |
217 | struct MeshConnectionQueue | 217 | struct MeshConnectionQueue |
218 | { | 218 | { |
219 | /** | ||
220 | * Peer queue handle, to cancel if necessary. | ||
221 | */ | ||
219 | struct MeshPeerQueue *q; | 222 | struct MeshPeerQueue *q; |
223 | |||
224 | /** | ||
225 | * Continuation to call once sent. | ||
226 | */ | ||
220 | GMC_sent cont; | 227 | GMC_sent cont; |
228 | |||
229 | /** | ||
230 | * Closure for @c cont. | ||
231 | */ | ||
221 | void *cont_cls; | 232 | void *cont_cls; |
222 | }; | 233 | }; |
223 | 234 | ||
@@ -2389,7 +2400,8 @@ GMC_is_sendable (struct MeshConnection *c, int fwd) | |||
2389 | * @param cont Continuation called once message is sent. Can be NULL. | 2400 | * @param cont Continuation called once message is sent. Can be NULL. |
2390 | * @param cont_cls Closure for @c cont. | 2401 | * @param cont_cls Closure for @c cont. |
2391 | * | 2402 | * |
2392 | * @return Handle to cancel the message before it's sent. NULL on error. | 2403 | * @return Handle to cancel the message before it's sent. |
2404 | * NULL on error or if @c cont is NULL. | ||
2393 | * Invalid on @c cont call. | 2405 | * Invalid on @c cont call. |
2394 | */ | 2406 | */ |
2395 | struct MeshConnectionQueue * | 2407 | struct MeshConnectionQueue * |
@@ -2505,6 +2517,13 @@ GMC_send_prebuilt_message (const struct GNUNET_MessageHeader *message, | |||
2505 | LOG (GNUNET_ERROR_TYPE_DEBUG, " C_P+ %p %u\n", c, c->pending_messages); | 2517 | LOG (GNUNET_ERROR_TYPE_DEBUG, " C_P+ %p %u\n", c, c->pending_messages); |
2506 | c->pending_messages++; | 2518 | c->pending_messages++; |
2507 | 2519 | ||
2520 | if (NULL == cont) | ||
2521 | { | ||
2522 | (void) GMP_queue_add (get_hop (c, fwd), data, type, size, c, fwd, | ||
2523 | &message_sent, q); | ||
2524 | return NULL; | ||
2525 | } | ||
2526 | |||
2508 | q = GNUNET_new (struct MeshConnectionQueue); | 2527 | q = GNUNET_new (struct MeshConnectionQueue); |
2509 | q->q = GMP_queue_add (get_hop (c, fwd), data, type, size, c, fwd, | 2528 | q->q = GMP_queue_add (get_hop (c, fwd), data, type, size, c, fwd, |
2510 | &message_sent, q); | 2529 | &message_sent, q); |
diff --git a/src/mesh/gnunet-service-mesh_connection.h b/src/mesh/gnunet-service-mesh_connection.h index d35630ef6..6faf594af 100644 --- a/src/mesh/gnunet-service-mesh_connection.h +++ b/src/mesh/gnunet-service-mesh_connection.h | |||
@@ -454,7 +454,8 @@ GMC_cancel (struct MeshConnectionQueue *q); | |||
454 | * @param cont Continuation called once message is sent. Can be NULL. | 454 | * @param cont Continuation called once message is sent. Can be NULL. |
455 | * @param cont_cls Closure for @c cont. | 455 | * @param cont_cls Closure for @c cont. |
456 | * | 456 | * |
457 | * @return Handle to cancel the message before it's sent. NULL on error. | 457 | * @return Handle to cancel the message before it's sent. |
458 | * NULL on error or if @c cont is NULL. | ||
458 | * Invalid on @c cont call. | 459 | * Invalid on @c cont call. |
459 | */ | 460 | */ |
460 | struct MeshConnectionQueue * | 461 | struct MeshConnectionQueue * |