Hi Aditya, On Sat, Mar 31, 2018 at 5:51 AM, Aditya Xavier <adityaxav...@me.com> wrote: > Increasing MSYS_1_BLOCK_COUNT to 30 gets it to work, but if I increase it to > 40 it doesn’t. > Block size being 110. > > Any reasoning behind this pattern?
This is strange. Can you post some piece of code to show how you handle this? > Also what would is behaviour of os_mbuf_free? Do I need to re init it again? Not sure what you mean by "reinit". Calling os_mbuf_free() releases mbuf back to pool and it should no longer be used. You should call os_mbuf_get() or os_msys_get() to get new mbuf from appropriate pool. Also, if your CBOR stream exceeds size of block then you will have chain of mbufs which should be freed using os_mbuf_free_chain() instead. Basically, if you're not sure whether your mbuf is just a single mbuf or chain of mbufs, you can always use os_mbuf_free_chain() instead of os_mbuf_free(). > Sent from my iPhone > >> On 30-Mar-2018, at 1:58 AM, Christopher Collins <ch...@runtime.io> wrote: >> >>> On Thu, Mar 29, 2018 at 10:27:36PM +0530, Aditya Xavier wrote: >>> Thanks for the tip. Would try that too.. >>> >>> However, I have tried few variations to check the BLE side ( whether it was >>> responsible for truncating ) >>> >>> 1. I am able to send the same message using encoding only.. i.e. if I >>> trigger the same using a button to send over ble. >>> i.e. BLE Connection, Button -> Encoding -> BLE Output, works. >>> >>> 2. The method which receives the char * data, itself receives a truncated >>> value. >>> BLE Connection, BLE Incoming -> Decoding -> Encoding -> BLE Outgoing, >>> does not work. Truncation. >>> >>> 3. I am able to send the same message using encoding only.. i.e if I >>> trigger only the encoding method after receiving a message over BLE. >>> i.e. BLE Connection, BLE Incoming -> Encoding -> BLE Outgoing, works. >>> >>> This kinda makes me feel that it should be a memory issue when its BLE + >>> Decoding + Encoding. With or without using mbuf / mbuf_pool >>> >>> Let me know if you require to see the code, I can write another small test >>> app for you. >> >> I think I understand the sequences you described. I'm afraid I don't >> have a good answer. >> >> Are you checking the return code of the encoding function? If the >> system is running out of mbufs during encoding, the function should >> return `CborErrorOutOfMemory`, and the mbuf chain will be partially >> filled. >> >> If you are running in gdb, another way to check for mbuf exhaustion is: >> ``` >> p os_msys_init_1_mempool >> ``` >> >> and look at the `mp_min_free` value. If it is 0, that means the pool >> has been exhausted at some point, and it is likely that some allocations >> have failed. >> >> You can also just try increasing the number of mbufs in the system: >> ``` >> newt target amend <target-name> syscfg=MSYS_1_BLOCK_COUNT=16 >> ``` >> >> (assuming you are currently using the default value of 12; adjust >> accordingly if not) >> >> Chris