Commit graph

11 commits

Author SHA1 Message Date
Anthony Thibault
fe17550a80 Code review feedback
In DependencyManager::set<>() destroy the clear the previous before allocating the new instance.
2019-05-10 15:41:52 -07:00
Anthony Thibault
442a679108 Make DepenencyManager thread-safe again
Before this PR, there were no locks around the two internal QHash data structures.
Races are rare, due to the fact that the DependencyManager is initialized on the main thread on startup and the fact that a static QWeakPointer was used as an internal cache.
However, there have been reported crashes where the render thread uses DependencyManager::isSet() perhaps while the main thread is adding a late dependency.
DependencyManager::isSet() did not use the static QWeakPointer cache and was more prone to race conditions.

To avoid this and perhaps other data races, mutexes now guard both of the internal QHash data structures.
Also, as an optimization, the most frequent call to DependencyManager::isSet was removed (Profile.cpp).
2019-05-10 14:12:10 -07:00
Brad Davis
6122fa145d More PR feedback 2015-11-06 17:17:26 -08:00
Brad Davis
37a9538f10 PR feedback, ensure destruction of shared objects 2015-11-06 16:57:31 -08:00
Brad Davis
11733c039f Allow shared libraries to access core global objects 2015-11-06 16:57:31 -08:00
Atlante45
27cc3d297e DependencyManager update
- Now need a call to DependencyManager::set(...) that support
	  variable arguments number and type
	- Now support destroy operation via DependencyManager::destroy()
	- Now support inheritance. All inheritance relationship need to
	  be specified via DependencyManager::registerInheritance<Base,
Derived>() before any call to the DepedencyManager involving Base.
	- Dependencies should now inherit from the class Dependency as
	  well as using SINGLETON_DEPENDENCY
2015-01-13 20:27:38 -08:00
Atlante45
d9d0166bc9 Use variadic templates to create instance with arguments 2014-12-17 15:23:39 -08:00
Atlante45
cf6aa563ac DM returns shared pointer 2014-12-16 13:54:24 -08:00
Atlante45
9aea2843ac Remove pointer check 2014-12-12 21:20:26 -08:00
Atlante45
50fd52377f Couple improvements to the dependency manager 2014-12-12 21:10:45 -08:00
Atlante45
14cda00ebc First implementation of the DependencyManager 2014-12-12 20:52:41 -08:00