Small help on trivial issue

Kun Yi kunyi at google.com
Sat Aug 3 07:47:37 AEST 2019


On Fri, Aug 2, 2019 at 2:19 PM Vijay Khemka <vijaykhemka at fb.com> wrote:
>
> Thanks a lot guys, It really helped.
>
> Regards
> -Vijay
>
> On 8/1/19, 11:27 PM, "vishwa" <vishwa at linux.vnet.ibm.com> wrote:
>
>     Here is another instance: from one of my old commits.
>
>
https://github.com/openbmc/phosphor-host-ipmid/blob/master/systemintfcmds.cpp#L131
>
>     !! Vishwa !!
>
>     On 8/2/19 7:39 AM, Lei YU wrote:
>     > I did not check the code details, but from the description, it is
likely due to
>     > the global variable's initialization order in a shared library.
>     >
>     > Basically, you need to specify
`__attribute__((init_priority(101)))` for your
>     > global variables.
>     >
>     > Please check below commit for details and how to manually specify
the init
>     > order for such variables.
>     >
https://github.com/openbmc/phosphor-host-ipmid/commit/4b0ddb68b4e76420358589213bc400155fa12e43
>     >
>     >
>     > On Fri, Aug 2, 2019 at 4:12 AM Vijay Khemka <vijaykhemka at fb.com>
wrote:
>     >> Team,
>     >>
>     >> I am having small issue of global json object corruption and I am
unable to find reason for it. I am defining a global json object
(nlohmann::json appSelData) at the start of file. I am initializing this
object in register function and accessing this in different functions
defined in same shared library. While accessing in different function, it
doesn’t hold initialized data. This is failing in my storagecommands.cpp
for IPMI.

I  would advise against using static global variables exactly for this
issue.
See also static initialization fiasco
<https://isocpp.org/wiki/faq/ctors#static-init-order>, another subtle way
to crash your app nondeterministically.
They were called out and forbidden
<https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables>
in Google C++ style guide (except for constants).
Using a factory and use smart pointers to manage ownership would be a safer
bet.

>     >>
>     >>
>     >>
>     >> Then I created a separate new file selcommands.cpp and did the
same operation, it works here as expected. So I am wondering why it is
failing in existing file vs new one. Looks like there are some header
included in existing file is messing it up but I have no clue yet. This
only happens with json object.
>     >>
>     >>
>     >>
>     >> For your reference, I am attaching both below files
>     >>
>     >> Storagecommands.cpp – where this fails
>     >>
>     >> Selcommands.cpp – where it works.
>     >>
>     >>
>     >>
>     >> I know it is a debug issue and I have been struggling last 2 days
so thought of asking for help to team. Any help here would be appreciated.
>     >>
>     >>
>     >>
>     >> Regards
>     >>
>     >> -Vijay
>
>
>


-- 
Regards,
Kun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20190802/3acdfe60/attachment.htm>


More information about the openbmc mailing list