[sr-dev] [kamailio/kamailio] tlsf memory manager status weirdness (#2628)

lazedo notifications at github.com
Sun Feb 7 13:08:38 CET 2021


### Description

TLSF mem manager accounting for wrong values

was trying to debug a crash and this popped up.

using a lot of small allocs until pkg_alloc returns NULL (when exhausted)
when NULL is returned the memory **used+overhead** exceeds the heap allocated.
<!--
-->

### Troubleshooting

#### Reproduction

use frequent small memory allocs until pool is exausted (returns NULL) , check tlsf status.

static void do_test_mem()
{
    void* chunk;
    tlsf_t pool = NULL;
    size_t total = 16 * 1024 * 1024;
    size_t half = 8 * 1024 * 1024;
    size_t sz = 6;
    int x;
    void* mem = malloc(total);
    char* mem2 = tlsf_cast(char*, tlsf_cast(ptrdiff_t, mem) + half);
    memset(mem2, 'X', half);
    assert(*mem2 == 'X');
    pool = tlsf_create_with_pool(mem, half);
    do { chunk = tlsf_malloc(pool, sz); } while(chunk != NULL);
    tlsf_status(pool);
    for(x=0; x < half; x++) {
        assert(*mem2 == 'X');
        mem2++;
    }
    free(mem);
}


<!--
If the issue can be reproduced, describe how it can be done.
-->

<!--
If you got a core dump, use gdb to extract troubleshooting data - full backtrace,
local variables and the list of the code at the issue location.

  gdb /path/to/kamailio /path/to/corefile
  bt full
  info locals
  list

If you are familiar with gdb, feel free to attach more of what you consider to
be relevant.
-->

```
heap size= **8388592**
used= **6285144**, used+overhead=**12578696**, free=**18446744073705361512**, fragments=0
max used (+overhead)=12578696, max fragments=1
Free blocks matrix ('.': none, 'X': between 2^X and (2^(X+1)-1) free blocks, X=A..Z, A=0, B=1, ...)
> first-level: 32 block list arrays between 2^fl and 2^(fl+1) bytes (fl=8..39)
v second-level: 32 block lists between 2^fl+sl*2^(fl-5) and 2^fl+(sl+1)*2^(fl-5)-1 bytes (sl=0..31)
 0|................................|
 1|................................|
 2|................................|
 3|................................|
 4|................................|
 5|................................|
 6|................................|
 7|................................|
 8|................................|
 9|................................|
10|................................|
11|................................|
12|................................|
13|................................|
14|................................|
15|................................|
16|................................|
17|................................|
18|................................|
19|................................|
20|................................|
21|................................|
22|................................|
23|................................|
24|................................|
25|................................|
26|................................|
27|................................|
28|................................|
29|................................|
30|................................|
31|................................|
```

#### Log Messages

<!--
Check the syslog file and if there are relevant log messages printed by Kamailio, add them next, or attach to issue, or provide a link to download them (e.g., to a pastebin site).
-->

```
identical to reproduce step when calling mem debug on a running instance
```

### Possible Solutions

<!--
If you found a solution or workaround for the issue, describe it. Ideally, provide a pull request with a fix.
-->

### Additional Information


```
  * **Kamailio Version** - built from master
```

* **Operating System**:


<!--
Details about the operating system, the type: Linux (e.g.,: Debian 8.4, Ubuntu 16.04, CentOS 7.1, ...), MacOS, xBSD, Solaris, ...;
Kernel details (output of `uname -a`)
-->

```
CentOS7 and alpine
```

## comments

heap size= **8388592** shouldn't it be **8388608** ?
used+overhead=**12578696** misleading
free=**18446744073705361512** misleading, looks like it has a negative value
the map doesn't look ok (or i'm not understanding what it should show), its the same output before the alloc and after.



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/2628
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-dev/attachments/20210207/114c3b71/attachment.htm>


More information about the sr-dev mailing list