aboutsummaryrefslogtreecommitdiff
path: root/src/mesh
diff options
context:
space:
mode:
authorBart Polot <bart@net.in.tum.de>2013-11-15 15:11:37 +0000
committerBart Polot <bart@net.in.tum.de>2013-11-15 15:11:37 +0000
commite9cb00442dfc2a6dd7910e4c361a37cf3f523128 (patch)
treea1aae52c23108699512f0a4fb2d47ddfad70da9c /src/mesh
parentebfc819af3fe71c4f567afedc38baa803a00118e (diff)
downloadgnunet-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.c21
-rw-r--r--src/mesh/gnunet-service-mesh_connection.h3
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 */
217struct MeshConnectionQueue 217struct 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 */
2395struct MeshConnectionQueue * 2407struct 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 */
460struct MeshConnectionQueue * 461struct MeshConnectionQueue *