dbus-sdr: Fixed race condition in fruRead

Return the actual fru data in getFru and not rely on the fruCach
wherever possible to make sure the the fru data is still avaliable even
if the fruCache get's updated.

Added writeFru to take in a fru vector to make sure that the fruWrite
with ipmi handler don't use the cache directly. Only use the fruCache in
writeFruIfRunning.

Tested:
Ran the two while loops in different terminal and check the size
written.
```
while [ true ]
do
   ipmitool fru read 27 /tmp/fru27.bin
done

while [ true ]
do
   ipmitool fru read 95 /tmp/fru95.bin
done
```

No issue of running into the race condition issue of the fru being
cleared and writing Fru Size of 0.

FruWrite seems to still work.

Signed-off-by: Willy Tu <wltu@google.com>
Change-Id: I48704fef362e4fbdf0c39e545c63872002534cdb
1 file changed
tree: 4e27e3ac4bdb5720af211b1747a63614744eb801
  1. app/
  2. dbus-sdr/
  3. docs/
  4. include/
  5. libipmid/
  6. libipmid-host/
  7. scripts/
  8. softoff/
  9. subprojects/
  10. test/
  11. user_channel/
  12. xyz/
  13. .build.sh
  14. .clang-format
  15. .gitignore
  16. .shellcheck
  17. .travis.yml
  18. apphandler.cpp
  19. apphandler.hpp
  20. chassishandler.cpp
  21. chassishandler.hpp
  22. dcmihandler.cpp
  23. dcmihandler.hpp
  24. elog-errors.hpp
  25. entity_map_json.cpp
  26. entity_map_json.hpp
  27. error-HostEvent.hpp
  28. fruread.hpp
  29. generate_whitelist.sh
  30. generate_whitelist_create.sh
  31. globalhandler.cpp
  32. globalhandler.hpp
  33. groupext.cpp
  34. host-cmd-manager.cpp
  35. host-cmd-manager.hpp
  36. host-interface.cpp
  37. host-interface.hpp
  38. host-ipmid-whitelist.conf
  39. ipmi_fru_info_area.cpp
  40. ipmi_fru_info_area.hpp
  41. ipmid-new.cpp
  42. ipmisensor.cpp
  43. ipmiwhitelist.hpp
  44. LICENSE
  45. meson.build
  46. meson_options.txt
  47. OWNERS
  48. read_fru_data.cpp
  49. read_fru_data.hpp
  50. README.md
  51. selutility.cpp
  52. selutility.hpp
  53. sensordatahandler.cpp
  54. sensordatahandler.hpp
  55. sensorhandler.cpp
  56. sensorhandler.hpp
  57. settings.cpp
  58. settings.hpp
  59. storageaddsel.cpp
  60. storageaddsel.hpp
  61. storagehandler.cpp
  62. storagehandler.hpp
  63. sys_info_param.cpp
  64. sys_info_param.hpp
  65. systemintfcmds.cpp
  66. systemintfcmds.hpp
  67. testaddsel.cpp
  68. testit.cpp
  69. transporthandler.cpp
  70. transporthandler.hpp
  71. whitelist-filter.cpp
README.md

Compile ipmid with default options:

meson builddir
ninja -C builddir

Compile ipmid with yocto defaults:

meson builddir -Dbuildtype=minsize -Db_lto=true -Dtests=disabled
ninja -C builddir

If any of the dependencies are not found on the host system during configuration, meson automatically gets them via its wrap dependencies mentioned in ipmid/subprojects.

Enable/Disable meson wrap feature

meson builddir -Dwrap_mode=nofallback
ninja -C builddir

Enable debug traces

meson builddir -Dbuildtype=debug
ninja -C builddir

Generate test coverage report:

meson builddir -Db_coverage=true -Dtests=enabled
ninja -C builddir test
ninja -C builddir coverage