[Mono-dev] Unwanted freeing of generic types

Zoltan Varga vargaz at gmail.com
Fri Aug 18 00:25:26 UTC 2017


Hi,

  Nine catch, could you submit a PR with the fix ?

            Zoltan

On Thu, Aug 17, 2017 at 4:54 PM, Neale Ferguson <neale at sinenomine.net>
wrote:

> In threads.c we defined SpecialStaticOffset:
>
>
> typedef union {
>
>         struct {
>
> #if G_BYTE_ORDER != G_LITTLE_ENDIAN
>
>                 guint32 type : 1;
>
>                 guint32 offset : 25;
>
>                 guint32 index : 6;
>
> #else
>
>                 guint32 index : 6;
>
>                 guint32 offset : 25;
>
>                 guint32 type : 1;
>
> #endif
>
>         } fields;
>
>         guint32 raw;
>
> } SpecialStaticOffset;
>
> However, the MAKE_SPECIAL_STATIC_OFFSET macro assumes little endian:
>
>
> #define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
>
>         ((SpecialStaticOffset) *{* .fields = *{* (type), (offset),
> (index) } *}*.raw)
>
>
> Therefore the offset value that was being returned was incorrect and we'd
> choose the wrong bitset. To fix this:
>
>
> #if G_BYTE_ORDER != G_LITTLE_ENDIAN
>
> #define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
>
>         ((SpecialStaticOffset) *{* .fields = *{* (type), (offset),
> (index) } *}*.raw)
>
> #else
>
> #define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
>
>         ((SpecialStaticOffset) *{* .fields = *{* (index), (offset),
> (type) } *}*.raw)
>
> #endif
>
> Making this change results in the failing (crashing) test -
> generics-special2.2 - to work as it should.
>
>
> Neale
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.dot.net
> http://lists.dot.net/mailman/listinfo/mono-devel-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dot.net/pipermail/mono-devel-list/attachments/20170817/3039dcb0/attachment.html>


More information about the Mono-devel-list mailing list