AA vs __gshared
Steven Schveighoffer
schveiguy at gmail.com
Fri Jul 28 11:15:31 UTC 2023
On 7/28/23 4:39 AM, IchorDev wrote:
> Issue is, this code I posted actually runs just fine, unlike the real code.
> My actual code does this HIGHLY SUSPICIOUS thing when printing their
> length each time before using them:
> ```
> 766
> 766
> 765
> 766
> 767
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 128000
> Error Program exited with code -11
> (backtrace:)
> #0 0x0000555555670c46 in rt.aaA.Impl.findSlotLookup(ulong, scope
> const(void*), scope const(TypeInfo)) inout ()
> #1 0x0000555555661592 in _aaInX ()
> ```
My suspicion would be a race condition in your real code, and no race
condition in this toy code. Second suspicion would be memory corruption
(possibly caused by a race condition).
> Therefore I must logically conclude that DRuntime's AAs are cursed!
> Unless this is a well-known issue or something...
AAs have worked forever. I've never had problems with them. Not saying
there's not a bug here, maybe there is. But I would be surprised.
> Thinking back, I've actually had them cause segfaults in non-threaded
> code, maybe `__gshared` was never the cause at all.
All `__gshared` does is give you storage that is accessible from all
threads, but is not typed as `shared`. It doesn't change how the data is
used.
-Steve
More information about the Digitalmars-d-learn
mailing list