This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Could not allocate memory for NDK daemon

Hello! I have a network project for c6678. System heap is located in L2SRAM, so there is not much memory for allocation and memory leaks are detected instantly.
So, I create a daemon for socket servicing on network start and it works fine for first 7-8 runs and then on 9-th connect to the port when NDK tries to create daemon I get the 'could not alloc' message. I included mmCheck before return from daemon function so I see memory map before removing daemon. As I can judge there is a memory leak connected with not complete cleanup after daemon termination.


Is it a bug of NDK?
Can I do something else to investigate the reason of this issue?


Run #1 17:48 ( 26%) 20:96 ( 62%) 1:128 ( 4%) 5:256 ( 41%) 1:512 ( 16%) 0:1536 0:3072 (15360/49152 mmAlloc: 87/0/43, mmBulk: 3/0/1) 1 blocks alloced in 512 byte page 17 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 20 blocks alloced in 96 byte page 5 blocks alloced in 256 byte page Run #2 17:48 ( 26%) 20:96 ( 62%) 1:128 ( 4%) 6:256 ( 50%) 1:512 ( 16%) 0:1536 0:3072 (15360/49152 mmAlloc: 108/0/64, mmBulk: 4/0/2) 1 blocks alloced in 512 byte page 16 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 20 blocks alloced in 96 byte page 6 blocks alloced in 256 byte page Run #3 18:48 ( 28%) 20:96 ( 62%) 1:128 ( 4%) 8:256 ( 66%) 1:512 ( 16%) 0:1536 0:3072 (15360/49152 mmAlloc: 114/0/66, mmBulk: 5/0/2) 1 blocks alloced in 512 byte page 18 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 20 blocks alloced in 96 byte page 8 blocks alloced in 256 byte page Run #4 20:48 ( 31%) 20:96 ( 62%) 1:128 ( 4%) 10:256 ( 83%) 1:512 ( 16%) 0:1536 0:3072 (15360/49152 mmAlloc: 120/0/68, mmBulk: 6/0/2) 1 blocks alloced in 512 byte page 20 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 20 blocks alloced in 96 byte page 10 blocks alloced in 256 byte page Run #5 22:48 ( 34%) 20:96 ( 62%) 1:128 ( 4%) 12:256 (100%) 1:512 ( 16%) 0:1536 0:3072 (15360/49152 mmAlloc: 126/0/74, mmBulk: 7/0/2) 1 blocks alloced in 512 byte page 22 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 16 blocks alloced in 96 byte page 12 blocks alloced in 256 byte page Run #6 24:48 ( 37%) 20:96 ( 62%) 1:128 ( 4%) 14:256 ( 58%) 1:512 ( 16%) 0:1536 0:3072 (18432/49152 mmAlloc: 136/0/80, mmBulk: 8/0/2) 1 blocks alloced in 512 byte page 24 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 16 blocks alloced in 96 byte page 12 blocks alloced in 256 byte page 2 blocks alloced in 256 byte page Run #7 26:48 ( 40%) 20:96 ( 62%) 1:128 ( 4%) 16:256 ( 66%) 1:512 ( 16%) 0:1536 0:3072 (18432/49152 mmAlloc: 142/0/82, mmBulk: 9/0/2) 1 blocks alloced in 512 byte page 26 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 16 blocks alloced in 96 byte page 12 blocks alloced in 256 byte page 4 blocks alloced in 256 byte page Run #8 28:48 ( 43%) 20:96 ( 62%) 1:128 ( 4%) 18:256 ( 75%) 1:512 ( 16%) 0:1536 0:3072 (18432/49152 mmAlloc: 148/0/84, mmBulk: 10/0/2) 1 blocks alloced in 512 byte page 28 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 16 blocks alloced in 96 byte page 12 blocks alloced in 256 byte page 6 blocks alloced in 256 byte page Run #9 30:48 ( 46%) 20:96 ( 62%) 1:128 ( 4%) 20:256 ( 83%) 1:512 ( 16%) 0:1536 0:3072 (18432/49152 mmAlloc: 154/0/86, mmBulk: 11/0/2) 1 blocks alloced in 512 byte page 30 blocks alloced in 48 byte page 1 blocks alloced in 128 byte page 16 blocks alloced in 96 byte page 12 blocks alloced in 256 byte page 8 blocks alloced in 256 byte page ti.sysbios.heaps.HeapMem: line 307: out of memory: handle=0x87b9b0, size=8200 <-.fardata:ti_sysbios_heaps_HeapMem_Object__table__V 00242.886 mmBulkAlloc(): could not allocate memory. 00242.887 out of memory: handle=0x800c05bc, size=0 <- ti_ndk_config_Global_pHdrMem @ 800bc480 in .far:NDK_PACKETMEM 00242.888 SBNew: Buffer OOM

  • I found an answer. The answer is that I should read manual more carefully.

    If you are not closing socket in daemon callback then callback should return 1, otherwise return 0.

    Here is an output of the mmCheck of a healthy program just for reference

    
    
    Run #1
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 108/0/62, mmBulk: 4/0/2)
    
    1 blocks alloced in 512 byte page
    18 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    6 blocks alloced in 256 byte page
    
    
    
    Run #2
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 114/0/68, mmBulk: 5/0/3)
    
    1 blocks alloced in 512 byte page
    18 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    6 blocks alloced in 256 byte page
    
    
    
    Run #3
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 120/0/74, mmBulk: 6/0/4)
    
    1 blocks alloced in 512 byte page
    18 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    6 blocks alloced in 256 byte page
    
    
    
    Run #4
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 124/0/80, mmBulk: 7/0/5)
    
    1 blocks alloced in 512 byte page
    16 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    6 blocks alloced in 256 byte page
    
    
    
    Run #5
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 126/0/86, mmBulk: 7/0/6)
    
    1 blocks alloced in 512 byte page
    14 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    4 blocks alloced in 256 byte page
    
    
    
    Run #6
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 138/0/92, mmBulk: 9/0/7)
    
    1 blocks alloced in 512 byte page
    18 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    6 blocks alloced in 256 byte page
    
    
    
    Run #7
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 138/0/98, mmBulk: 9/0/8)
    
    1 blocks alloced in 512 byte page
    14 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    4 blocks alloced in 256 byte page
    
    
    ...
    
    
    Run #14
    
      21:48   ( 32%)    20:96   ( 62%)     1:128  (  4%)     7:256  ( 58%)  
       1:512  ( 16%)     0:1536            0:3072         
    (15360/49152 mmAlloc: 180/0/140, mmBulk: 16/0/15)
    
    1 blocks alloced in 512 byte page
    14 blocks alloced in 48 byte page
    1 blocks alloced in 128 byte page
    20 blocks alloced in 96 byte page
    4 blocks alloced in 256 byte page
    
    
    ...
    
    
    

  • Hello Sam,

    Glad to here that the issue is resolved. Thank you for the update.