Commit 43a1bd6751fae35828714699cc20f11d27165023
Committed by
David Gräff
1 parent
7ed6776a
Fixes a segfault on startup. The previous code assumed that ModelRegistry::insta…
…nce would be initialized before being used by other static initializers. However, static initialization order is undefined. Plus, at least unter C++11 and according to 6.7[stmt.decl] p.4, this initialization of get():inst is thread-safe.
Showing
2 changed files
with
4 additions
and
4 deletions
openhantek/src/hantekdso/modelregistry.cpp
| @@ -2,9 +2,10 @@ | @@ -2,9 +2,10 @@ | ||
| 2 | 2 | ||
| 3 | #include "modelregistry.h" | 3 | #include "modelregistry.h" |
| 4 | 4 | ||
| 5 | -ModelRegistry *ModelRegistry::instance = new ModelRegistry(); | ||
| 6 | - | ||
| 7 | -ModelRegistry *ModelRegistry::get() { return instance; } | 5 | +ModelRegistry *ModelRegistry::get() { |
| 6 | + static ModelRegistry inst; | ||
| 7 | + return &inst; | ||
| 8 | +} | ||
| 8 | 9 | ||
| 9 | void ModelRegistry::add(DSOModel *model) { supportedModels.push_back(model); } | 10 | void ModelRegistry::add(DSOModel *model) { supportedModels.push_back(model); } |
| 10 | 11 |
openhantek/src/hantekdso/modelregistry.h
| @@ -11,6 +11,5 @@ public: | @@ -11,6 +11,5 @@ public: | ||
| 11 | void add(DSOModel* model); | 11 | void add(DSOModel* model); |
| 12 | const std::list<DSOModel*> models() const; | 12 | const std::list<DSOModel*> models() const; |
| 13 | private: | 13 | private: |
| 14 | - static ModelRegistry* instance; | ||
| 15 | std::list<DSOModel*> supportedModels; | 14 | std::list<DSOModel*> supportedModels; |
| 16 | }; | 15 | }; |