Skip to content

REL::IDs missing when accessed in PostLoad but available in PostPostLoad #237

Open
@alandtse

Description

@alandtse

The REL ID database may not be ready for mods in PostLoad. But this behavior is random.

As reported on discord:
CommonlLibSF mod is now reporting missing IDs that were confirmed in addresslib database. Code had previously worked before SF 1.8.86. Workaround was to load the mod later:
"I've changed kPostLoad to kPostDataLoad in my listener that starts everything and now things are ok. "

This was previously seen in fo4 and fixed by testing for actual data instead of an init boolean.

alandtse/CommonLibF4@667490a and prior discord [discussion] (https://discord.com/channels/535508975626747927/541414634117398536/1129919975327535104)

Nukem's thoughts on seeing commonlibf4 commit:

wtf
it should've just used std::call_once and been done with it
but even then, it's not going to be a threading issue and the atomics are irrelevant
which leaves _instance._filename != L""
someone create a repro of this on github and I'll debug it 

Initial analysis of SF code vs fo4:
The same older code in iddatabase

if (_initialized.load(std::memory_order_relaxed)) {
return _instance;
but the code looks different in module.h https://github.com/Starfield-Reverse-Engineering/CommonLibSF/blob/f2ea1300936d90f1baf15980db8c571a104b4eed/CommonLibSF/include/REL/Module.h

As no repro case was available, we're just logging the issue for anyone else.

This can be avoided with other workarounds as described here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions