[
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)