View Issue Details

IDProjectCategoryView StatusLast Update
0001700GNUnettransport servicepublic2011-06-28 14:34
Reportermrwiggles Assigned ToMatthias Wachs  
PriorityurgentSeveritymajorReproducibilitysometimes
Status closedResolutionfixed 
Product VersionGit master 
Summary0001700: Memory leak in gnunet-service-transport (or plugins?)
Descriptiongnunet-service-transport takes up around 300M of memory (running on planetlab nodes for with approximately 300 peers).

Jun 16 09:42:05 transport-25599 WARNING External protocol violation detected at plugin_transport_tcp.c:2032
Additional InformationFixed memory leaks... if more leaks exist please open a new bug report
TagsNo tags attached.

Relationships

duplicate of 0001719 closedChristian Grothoff Core/transport api memory leak 

Activities

mrwiggles

2011-06-16 18:08

developer   ~0004381

Last edited: 2011-06-16 18:08

This appears to be the issue.

==4311== 12,250 bytes in 28 blocks are definitely lost in loss record 14 of 14
==4311== at 0x43DD525: malloc (vg_replace_malloc.c:149)
==4311== by 0x4402C1F: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==4311== by 0x4402A19: GNUNET_xmalloc_ (common_allocation.c:61)
==4311== by 0x804C1D9: transmit_to_peer (gnunet-service-transport.c:2212)
==4311== by 0x80511E6: transmit_hello_and_ping (gnunet-service-transport.c:4495)
==4311== by 0x804ECAE: setup_peer_check_blacklist (gnunet-service-transport.c:3632)
==4311== by 0x80516B4: run_validation (gnunet-service-transport.c:4632)
==4311== by 0x43E6460: delta_match (hello.c:419)
==4311== by 0x43E5F97: GNUNET_HELLO_iterate_addresses (hello.c:248)
==4311== by 0x43E64C7: GNUNET_HELLO_iterate_new_addresses (hello.c:451)
==4311== by 0x8051B3B: check_hello_validated (gnunet-service-transport.c:4761)
==4311== by 0x43E9A8C: peerinfo_handler (peerinfo_api.c:527)

mrwiggles

2011-06-20 16:09

developer   ~0004443

Two leaks...

==32258== 2,082 bytes in 5 blocks are possibly lost in loss record 15 of 18
==32258== at 0x4022525: malloc (vg_replace_malloc.c:149)
==32258== by 0x403D60C: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==32258== by 0x403D6B9: GNUNET_xmalloc_ (common_allocation.c:61)
==32258== by 0x804C40E: transmit_to_peer (gnunet-service-transport.c:2212)
==32258== by 0x804CB3F: setup_new_neighbour (gnunet-service-transport.c:3424)
==32258== by 0x804CDA4: handle_request_connect (gnunet-service-transport.c:5810)
==32258== by 0x405B630: GNUNET_SERVER_inject (server.c:688)
==32258== by 0x405B786: client_message_tokenizer_callback (server.c:902)
==32258== by 0x405C527: GNUNET_SERVER_mst_receive (server_mst.c:229)
==32258== by 0x405B085: process_mst (server.c:763)
==32258== by 0x4041C51: receive_ready (connection.c:1192)
==32258== by 0x405A868: GNUNET_SCHEDULER_run (scheduler.c:648)
==32258==
==32258==
==32258== 517,686 (514,486 direct, 3,200 indirect) bytes in 1,234 blocks are definitely lost in loss record 18 of 18
==32258== at 0x4022525: malloc (vg_replace_malloc.c:149)
==32258== by 0x403D60C: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==32258== by 0x403D6B9: GNUNET_xmalloc_ (common_allocation.c:61)
==32258== by 0x804C40E: transmit_to_peer (gnunet-service-transport.c:2212)
==32258== by 0x804CB3F: setup_new_neighbour (gnunet-service-transport.c:3424)
==32258== by 0x804CDA4: handle_request_connect (gnunet-service-transport.c:5810)
==32258== by 0x405B630: GNUNET_SERVER_inject (server.c:688)
==32258== by 0x405B786: client_message_tokenizer_callback (server.c:902)
==32258== by 0x405C527: GNUNET_SERVER_mst_receive (server_mst.c:229)
==32258== by 0x405B085: process_mst (server.c:763)
==32258== by 0x4041C51: receive_ready (connection.c:1192)
==32258== by 0x405A868: GNUNET_SCHEDULER_run (scheduler.c:648)

mrwiggles

2011-06-20 16:09

developer   ~0004444

Transport api

==32255== 16 bytes in 1 blocks are definitely lost in loss record 2 of 4
==32255== at 0x4022525: malloc (vg_replace_malloc.c:149)
==32255== by 0x404460C: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==32255== by 0x40446B9: GNUNET_xmalloc_ (common_allocation.c:61)
==32255== by 0x404BCDF: GNUNET_CONTAINER_heap_create (container_heap.c:142)
==32255== by 0x4034B3B: GNUNET_TRANSPORT_connect (transport_api_new.c:1322)
==32255== by 0x804A3C0: run (gnunet-service-core.c:4730)
==32255== by 0x4065F67: service_task (service.c:1403)
==32255== by 0x4061868: GNUNET_SCHEDULER_run (scheduler.c:648)
==32255== by 0x4067E58: GNUNET_SERVICE_run (service.c:1622)
==32255== by 0x804A111: main (gnunet-service-core.c:4764)

Christian Grothoff

2011-06-22 14:15

manager   ~0004450

Leak from node 4444 fixed in SVN 15745.

mrwiggles

2011-06-22 15:06

developer   ~0004451

Another still present...

==11218== 459,202 (457,426 direct, 1,776 indirect) bytes in 987 blocks are definitely lost in loss record 18 of 18
==11218== at 0x4022525: malloc (vg_replace_malloc.c:149)
==11218== by 0x403D6EC: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==11218== by 0x403D799: GNUNET_xmalloc_ (common_allocation.c:61)
==11218== by 0x402A124: GNUNET_PEERINFO_iterate (peerinfo_api.c:666)
==11218== by 0x804CA0A: setup_new_neighbour (gnunet-service-transport.c:3421)
==11218== by 0x804CDA4: handle_request_connect (gnunet-service-transport.c:5816)
==11218== by 0x405B990: GNUNET_SERVER_inject (server.c:704)
==11218== by 0x405BAE6: client_message_tokenizer_callback (server.c:918)
==11218== by 0x405C947: GNUNET_SERVER_mst_receive (server_mst.c:229)
==11218== by 0x405B3E5: process_mst (server.c:779)
==11218== by 0x4041DD1: receive_ready (connection.c:1209)
==11218== by 0x405AB98: GNUNET_SCHEDULER_run (scheduler.c:648)

mrwiggles

2011-06-22 15:06

developer   ~0004452

==12494== 115,404 (81,240 direct, 34,164 indirect) bytes in 206 blocks are definitely lost in loss record 17 of 17
==12494== at 0x4022525: malloc (vg_replace_malloc.c:149)
==12494== by 0x403D6EC: GNUNET_xmalloc_unchecked_ (common_allocation.c:132)
==12494== by 0x403D799: GNUNET_xmalloc_ (common_allocation.c:61)
==12494== by 0x4042457: GNUNET_CONNECTION_create_from_existing (connection.c:334)
==12494== by 0x404250D: GNUNET_CONNECTION_create_from_sockaddr (connection.c:1034)
==12494== by 0x4398AE0: tcp_plugin_send (plugin_transport_tcp.c:1480)
==12494== by 0x804BE90: try_transmission_to_peer (gnunet-service-transport.c:2144)
==12494== by 0x804D9F2: send_periodic_ping (gnunet-service-transport.c:4003)
==12494== by 0x405AB98: GNUNET_SCHEDULER_run (scheduler.c:648)
==12494== by 0x40612A8: GNUNET_SERVICE_run (service.c:1626)
==12494== by 0x804A024: main (gnunet-service-transport.c:7666)

Matthias Wachs

2011-06-22 17:39

manager   ~0004453

IMHO we have missing transmit continuation calls from tcp:
Example:
plugin->send calls: 171 (mq's created)
calls to transmit continuation: 130 (mq's deleted in cont)
directly deleted (send syserr): 0
deleted (no_addr): 0
difference: 41

Have to look in tcpplugin...

Christian Grothoff

2011-06-23 12:40

manager   ~0004462

The leak from 4452 typically occurs if some code calls GNUNET_SERVER_client_keep and never calls GNUNET_SERVER_client_drop.

Christian Grothoff

2011-06-23 12:57

manager   ~0004463

Leak in 0004451 might be fixed in SVN 15761.

Matthias Wachs

2011-06-24 17:28

manager   ~0004465

0004451 is still existing

The issues is somehow related to addresses from peerinfo
- Does not happen on a fresh peer
- Does not happen if peerinfo is disabled

Tried to reproduce it with 3 peers:
One bootstrap server, 2 clients
Could not reproduce it

Matthias Wachs

2011-06-28 11:43

manager   ~0004468

Found problem causing 0004451:

During RequestConnects from core:

Transport service sends messages to peers but disconnects from peer before transmit_send_continuation is called!

messages with outstanding continuation calls are lost...

Matthias Wachs

2011-06-28 13:36

manager   ~0004469

Neighbour is deleted and send_cont==NULL before send_continuation can delete messages

Issue History

Date Modified Username Field Change
2011-06-16 11:43 mrwiggles New Issue
2011-06-16 11:43 mrwiggles Status new => assigned
2011-06-16 11:43 mrwiggles Assigned To => Matthias Wachs
2011-06-16 15:33 Christian Grothoff Severity minor => major
2011-06-16 16:26 mrwiggles Assigned To Matthias Wachs => mrwiggles
2011-06-16 18:08 mrwiggles Note Added: 0004381
2011-06-16 18:08 mrwiggles Note Edited: 0004381
2011-06-16 18:09 mrwiggles Assigned To mrwiggles => Christian Grothoff
2011-06-17 09:46 Christian Grothoff Assigned To Christian Grothoff => Matthias Wachs
2011-06-17 12:07 Christian Grothoff Priority normal => urgent
2011-06-20 16:09 mrwiggles Note Added: 0004443
2011-06-20 16:09 mrwiggles Note Added: 0004444
2011-06-22 14:15 Christian Grothoff Note Added: 0004450
2011-06-22 15:06 mrwiggles Note Added: 0004451
2011-06-22 15:06 mrwiggles Note Added: 0004452
2011-06-22 17:39 Matthias Wachs Note Added: 0004453
2011-06-23 12:30 Christian Grothoff Relationship added duplicate of 0001719
2011-06-23 12:40 Christian Grothoff Note Added: 0004462
2011-06-23 12:57 Christian Grothoff Note Added: 0004463
2011-06-24 17:28 Matthias Wachs Note Added: 0004465
2011-06-28 11:43 Matthias Wachs Note Added: 0004468
2011-06-28 11:44 Matthias Wachs Status assigned => confirmed
2011-06-28 13:36 Matthias Wachs Note Added: 0004469
2011-06-28 14:34 Matthias Wachs Status confirmed => closed
2011-06-28 14:34 Matthias Wachs Resolution open => fixed
2011-06-28 14:34 Matthias Wachs Additional Information Updated