[ https://issues.apache.org/jira/browse/PROTON-892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14705234#comment-14705234 ]
Alan Conway commented on PROTON-892: ------------------------------------ Thanks a lot Michael. I had to adjust a bit for changes in proton, I made 2 actual changes to your solution: I defined PNI_NID_MAX. The problem with -1L is it makes assumptions about the signedness and bit size of pni_nid_t far away from the definition. It is correct in the code as it is today, but if someone changed pni_nid_t to a signed type, or a type bigger than long (and note size_t is not *guaranteed* to fit in a long on all platforms) it would create a subtle, rare, platform-specific bug. I dropped the case where you grow by adding 1k and stuck to a simple "double till you hit the max". I don't see a reason to change algorithmic growth algorithm just because you passed 32k. Thanks again! > pn_data_t capacity does not grow above 32768 items > -------------------------------------------------- > > Key: PROTON-892 > URL: https://issues.apache.org/jira/browse/PROTON-892 > Project: Qpid Proton > Issue Type: Bug > Components: proton-c > Affects Versions: 0.9, 0.9.1, 0.10 > Reporter: Michael > Assignee: Alan Conway > Fix For: 0.10.1 > > Attachments: 0003-data-capacity.patch > > > pn_data_grow() function looses half of the available data capacity. > The following happens: when data overflows, pn_data_grow is invoked. It > increases data capacity 2 times and reallocates nodes array. Data capacity is > represented as uint16_t type and so when capacity reaches 32768 items, the > result of multiplication by 2 becomes 0. This makes realloc return null and > crashes the program. -- This message was sent by Atlassian JIRA (v6.3.4#6332)