Hi Aditya,
On Fri, Apr 06, 2018 at 07:36:41PM +0530, Aditya Xavier wrote:
> Hi Mynewt Team,
>
> Please help me understand the behavior of MBUF.
>
> PFB the steps I did :-
>
> 1. os_mempool_init
> 2. os_mbuf_pool_init
> 3. Initialized a os_mbuf by os_mbuf_get
> 4. Triggered Console Reader.
> 5. os_mbuf_copyinto the console_buf into the os_mbuf
> 6. Did a eventq_put to get into a event callback.
> 7. Read os_mbuf value & os_mbuf len
> 8. os_mbuf_free_chain
> 9. Read os_mbuf value & os_mbuf len
> 10. Initialized a os_mbuf by os_mbuf_get
> 11. Repeat step 4 onwards.
>
> Problem :-
> In step 7, I read the previous string, however the length is correct.
> In step 9, I read the previous string, however the length is 0.
`os_mbuf_free_chain` frees the mbuf chain back to its source pool. From
that point, accessing the mbuf via this pointer is an error.
This is analogous to the following example:
int *x = malloc(sizeof(*x));
*x = 99;
free(x);
printf("*x = %d\n", *x);
In other words, don't access something after you free it! :) You'll
need to allocate a new mbuf if you need one after freeing the first.
Chris